Question

J'ai défini un StringCollection dans les paramètres du projet. Je veux utiliser les valeurs dans une zone de liste déroulante.

Est-il possible d'y accéder xamly?

J'ai essayé:

<CollectionViewSource Source="{x:Static src:MySettings.Default.MyCollection}" />
<CollectionViewSource 
    Source="{Binding Source={x:Static src:MySettings.Default.MyCollection}}" />

**** ** src est le xmlns du projet *

Il dit: "Type src: MySettings.Default n'a pas été trouvé".

La chose est que MySettings est une classe qui offre une de propriété par défaut qui est une instance de thread-safe de MySettings, je veux vraiment obtenir la collection de la propriété par défaut et non par l'instanciation d'un nouveau sur.

Y at-il d'autres moyens que je ne suis pas au courant, peut-être des objets ObjectDataProvider can statiques d'accès?

Je pensais que, peut-être que je peux faire dans le App.xaml une ressource mondiale qui MySettings.Default de retour qui est une instance de la classe MySettings et d'accéder ensuite toutes ses propriétés, je vais essayer, mais je préfère le facile manière.

Était-ce utile?

La solution

Je l'ai toujours fait en utilisant x: Extension de balisage statique . La clé est de mettre la source à Settings.Default et le chemin à la position désirée comme ceci:

<Window x:Class="SettingsBindSample.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:s="clr-namespace:SettingsBindSample.Properties"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <CollectionViewSource x:Key="MyItems" 
      Source="{Binding MyCollection, Source={x:Static s:MySettings.Default}}" />
    </Window.Resources>
    <StackPanel>
        <ComboBox ItemsSource="{Binding Source={StaticResource MyItems}}" />
    </StackPanel>
</Window>

Autres conseils

J'ai trouvé. Vérifier, espère que je ne perds pas mon temps ...

http://code.msdn.microsoft.com/StaticExExtension

Si vous avez une meilleure idée, s'il vous plaît savoir de Lemme.

Dans le prolongement de la réponse de Joseph, il est également possible d'accéder aux paramètres individuels directement avec {x:Static } en utilisant une classe wrapper statique. Cela permet d'utiliser des valeurs de paramètres où une liaison ne fonctionne pas - notamment des animations, ou des propriétés qui ne sont pas des propriétés de dépendance

.

L'approche de base est la suivante:

public static class XamlSettings 
{
     public static MySettingsMember { get {return Properties.MySettings.Default.MySettingsMember; }}
}

dont vous parlez alors en XAML sous l'espace de noms de la classe wrapper est le long des lignes de <DoubleAnimation From="{x:Static local:XamlSettings.MySettingsMember}" ... />.

un additif au présent, en essayant d'exposer directement par défaut ne pas le travail, sans doute parce qu'il est pas tout à fait « assez » statique - propriétés sur défaut sont propriétés de l'instance, qui {x:Static} ne aime pas. Vous pourriez probablement écrire une extension de balisage personnalisé qui obtenir des propriétés d'exemple, si.

Ceci est particulièrement utile pour une approche à l'animation où vous ne parlez pas strictement basée sur les ressources voulez lier (ce qui porte toutes sortes de questions susceptibles d'être gelés en jeu), mais pas plus que vous voulez avoir beaucoup de <sys:double x:Key="MyNumber">50.0</sys:double>s singleton coups de pieds autour (ou si vous voulez éviter la surcharge d'un dictionnaire fusionné des ressources au niveau de l'application, que je suis porté à croire est non seulement instancié une seule fois dans l'application).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top