ListBox.ItemsSource de liaison dans le code et dans le code xaml
J'ai écrit un code simple comme
public ObservableCollection<string> Names …
public Window1()
{
PutInDataIntoNames();
InitializeComponent();
this.listBox1.ItemsSource = Names;
}
et en xaml
<Grid>
<ListBox Margin="10,11,10,16"
Name="listBox1"
Background="Black"
Foreground="Orange"
/>
</Grid>
Puis j'ai eu envie de propriété ItemsSource en xaml. Dans ce but que j'ai écrit ce qui suit:
ItemsSource="{Binding Path=Names}"
Malheureusement, il ne fonctionne pas. Pourriez-vous expliquer pourquoi et comment faire de ce droit?
InformationsquelleAutor Kirill Lykov | 2010-09-02
Vous devez vous connecter pour publier un commentaire.
Le faire dans le code derrière
et en XAML
Idéalement, vous devriez suivre MVVM de conception afin d'isoler les données de code derrière.
Si vous ne spécifiez le chemin de liaison la liaison moteur va essayer de naviguer sur le chemin à partir de l'actuel
DataContext
doncItemsSource="{Binding Path=Names}"
ne fonctionne pas comme cela, il y a beaucoup de choses à garder à l'esprit, surtout quand on fait des choses plus complexes.Le plus important de l'article que tout le monde qui est nouveau pour la liaison de données doit lire est le La Liaison de données vue d'ensemble sur MSDN
Pour en revenir à votre liaison, si vous voulez le faire complètement en XAML, vous pouvez le faire, vous avez juste besoin de faire la Fenêtre de votre source d'une certaine manière, soit en faisant référence directement ou relativement ou en le définissant comme le DataContext.
1 - Référence Directe:
2 - Référence Relative
3 - mise en place du DataContext
Window
exemple:DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}"
. C'est le XAML équivalent de c#DataContext = this
, mais qui mérite sa propre explication, ce qui est difficile à trouver en ligne (et est apparemment absents de la documentation MSDN, tous les exemples étant basé sur source étant une ressource, jamais sur un objet CLR créé dans le code-behind).Il semble que votre
Names
pourrait être un champ. Vous pouvez SEULEMENT de se lier aux propriétés publiques