2010-04-22 4 views
1

J'ai défini un StringCollection dans les paramètres du projet. Je veux utiliser les valeurs dans un ComboBox.Comment accéder à MyProject.MySettings.Default.SomeSetting à partir de xaml?

Existe-t-il un moyen 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é". Le fait est que MySettings est une classe qui offre une propriété Default qui est une instance thread-safe de MySettings, je veux vraiment obtenir la collection de la propriété Default et non en instanciant un nouveau.

Y a-t-il d'autres façons dont je ne suis pas au courant, peut-être que ObjectDataProvider peut accéder à des objets statiques?

Je pensais, peut-être que je peux faire dans l'App.xaml une ressource globale qui renvoie MySettings.Default qui est une instance de la classe MySettings, puis accéder à toutes ses propriétés, je vais essayer, mais je préfère le moyen facile.

+0

Ces paramètres de projet sont-ils dans l'app.config ou ailleurs? –

+0

Ils le sont, mais je ne vais pas les récupérer à partir de là. – Shimmy

Répondre

3

Je l'ai toujours fait en utilisant le x:Static Markup Extension. La clé est de définir la source de Settings.Default et le chemin vers le réglage désiré 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> 
0

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 enveloppe statique . Cela permet d'utiliser des valeurs de paramètres dans lesquelles une liaison ne fonctionnera pas - en particulier des animations ou des propriétés qui ne sont pas des propriétés de dépendance.

L'approche de base est:

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}" ... />. En tant qu'addendum à cela, essayer d'exposer directement par défaut ne fonctionne pas, probablement parce que ce n'est pas assez "statique" - les propriétés de Default sont des propriétés d'instance, ce que {x:Static} n'aime pas. Vous pourriez probablement écrire une extension de balisage personnalisé qui obtiendrait des propriétés d'instance, cependant. Ceci est particulièrement utile pour une approche basée sur les ressources à l'animation où vous ne voulez pas à proprement parler lier (ce qui met en jeu toutes sortes de problèmes de freezable), mais vous ne voulez pas non plus avoir beaucoup de singleton <sys:double x:Key="MyNumber">50.0</sys:double> s (ou que vous voulez éviter la surcharge d'un dictionnaire de ressources au niveau de l'application fusionné, que je suis amené à croire n'est pas seulement instancié une fois à travers l'application).

Questions connexes