WPF: Set de Liaison de la propriété pour ListBox de liaison
J'ai une zone de liste où je lier l'ItemsSource à une collection stockées dans l'ensemble DataContext de l'objet. Cela rend la liste affichée à l'aide de la fonction ToString ().
<ListBox ItemsSource="{Binding SomeCollection}"></ListBox>
Maintenant, je veux afficher une propriété pour les objets de la collection à la place. Je tiens donc à définir un modèle etc pour ce faire, sur tous les objets de la liste liée. J'ai essayé une variété de différentes approches, sans succès. J'aimerais faire quelque chose comme ceci:
<ListBox ItemsSource="{Binding SomeCollection}">
<ListBox.Template>
<ControlTemplate>
<ListViewItem Content="{Binding ThePropertyOnElm}"></ListViewItem>
</ControlTemplate>
</ListBox.Template>
</ListBox>
Quelqu'un peut-il m'aider à faire de ce droit?
Dites-vous que
Je suis désolé si j'ai été imprécise. Ce que je veux dire, c'est SomeCollection est une ObservableCollection<MyElm>, et MyElm a une propriété ThePropertyOnElm, qui je veux être affiché dans la zone de liste à la place de ce que la fonction ToString() de MyElm retourne.
ThePropertyOnElm
est une valeur d'exécution qui pourrait être changé dynamiquement modifier ce paramètre n'est affiché dans la zone de liste?Je suis désolé si j'ai été imprécise. Ce que je veux dire, c'est SomeCollection est une ObservableCollection<MyElm>, et MyElm a une propriété ThePropertyOnElm, qui je veux être affiché dans la zone de liste à la place de ce que la fonction ToString() de MyElm retourne.
OriginalL'auteur stiank81 | 2009-09-16
Vous devez vous connecter pour publier un commentaire.
vous n'avez pas besoin de spécifier un modèle, vous pouvez simplement utiliser le DisplayMemberPath des biens, comme suit:
espérons que cette aide!
OriginalL'auteur RoelF
Je pense que c'est ce que vous êtes désireux de le faire:
Le Modèle de la zone de liste pour modifier la façon dont le réel listbox se présente, et itemtemplate va contrôler la façon dont les différents éléments de la listbox. J'ai changé le controltemplate dans un DataTemplate, et il a attribué le type de YourDataType. Aussi, j'ai utilisé un textblock dans le modèle de données au lieu de listboxitem depuis le datatemplate est affecté à la listboxitem (qui doit contenir un certain type de contenu à la place d'un autre listboxitem).
je n'ai pas essayé de compiler ce il pourrait ne pas être tout à fait correct. si elle ne marche pas, faites le moi savoir et mal prendre les mesures supplémentaires!
Cela ressemble à ce que je voulais, jusqu'à ce que Roel a donné le plus simple, oui. Garder cette de référence pour plus tard si j'ai besoin de faire quelque chose de plus complexe. Thx!
OriginalL'auteur Mark Synowiec
De l'utilisation du Chemin de liaison de la propriété:
Note: La raison pour laquelle le quelque peu déroutant nom (Chemin d'accès) est qu'elle peut être étendue à des sous-propriétés, etc. Donc, si le
ThePropertyOnElm
propriété renvoie un objet avec une propriété appeléeName
, vous pouvez écrire{Binding Path=ThePropertyOnElm.Name}
etc.Je ne crois pas que c'est toute différente de ce qui était demandé dans la question. Le
Path
attribut deBinding
est le contenu par défaut de la propriété, ce qui signifie que vous n'avez pas à inclure explicitement comme vous l'avez suggéré. Je ne pense pas que la question d'origine est très clair sur ce qui est requis.Hm, oui, vous êtes tous les deux raison. Je corrige la position des mains.
OriginalL'auteur Tor Haugen
Voici un exemple, j'ai récemment posté sur le Code du Projet:
Dans cet exemple, j'ai mis le ItemsSource à point pour le datacontext de liaison, qui pourrait être n'importe où de l'arborescence visuelle. Le modèle d'élément est défini dans la Fenêtre.Ressources, mais pourrait tout aussi bien être définis dans un autre ResourceDictionary. En gros, c'éléments de modèle va montrer un textblock unique pour chaque élément de la ligne, mais cela peut être beaucoup plus compliqué si nécessaire; c'est la beauté de WPF.
OriginalL'auteur Pete OHanlon