2009-10-25 7 views
0
ItemsSource="{Binding Source={StaticResource stringResources}, Path=MyProp}" 

J'ai essayé et obtenu à ce jour, mais je ne suis pas compilé:comment exprimer combobox XAML données obligatoire dans C# code

comboBox.ItemsSource = new Binding { Source = new StringResources(), ElementName = "MyProp" }; 
comboBox.DisplayMemberPath="Value"; 
comboBox.SelectedValuePath="Key"; 

Il dit qu'il ne peut pas convertir liaison à IEnumerable et Je ne savais pas comment construire un PropertyPath donc j'ai utilisé ElementName mais je ne sais pas si c'est la même chose. StringResources est une classe qui possède une propriété MyProp qui renvoie un dictionnaire.

Répondre

2
var binding = new Binding("MyProp") { Source = new StringResources() }; 
BindingOperations.SetBinding(comboBox, ComboBox.ItemsSourceProperty, binding); 

Comme alternative à l'utilisation BindingOperations, vous pouvez également utiliser la méthode de la classe SetBindingComboBox.

Dans l'intérêt de vous enseigner comment pêcher, votre code essayait d'assigner l'instance Binding directement à la propriété ItemsSource (qui ne prend que des objets de certains types, y compris IEnumerable). Vous devez utiliser le moteur de liaison de WPF pour traduire votre source en quelque chose que la propriété cible peut consommer. Dans ce cas, il traduit ou surfe la propriété MyProp sur une instance de StringResources à une énumération qui est ensuite consommée par la propriété ItemsSource.

+0

Merci cela fonctionne très bien maintenant! J'ai également remarqué qu'il est très important d'assigner DisplayMemberPath et SelectedValuePath * avant que * la liaison soit ajoutée, sinon cela ne fonctionnera pas. – codymanix