WPF: Comment lier à un seul élément d'une collection, n'utilisant pas ItemsControl puisque je ne veux pas tous les afficher
J'ai cette exigence, que j'ai une collection d'objets (ObservableCollection), mais je ne veux afficher le premier élément. L'exigence vient du fait que dans la plupart des cas, la collection ne contient qu'un seul élément. Et en raison de la limite de l'espace, même si il y a plusieurs éléments de la collection, nous aimerions afficher le nombre d'articles, les détails de la première (même présentation, comme état de la situation) et une ...
symbole pour indiquer à l'utilisateur qu'il n'y a plus d'éléments. Et lorsque la souris est au-dessus de l'élément de l'INTERFACE utilisateur d'un popup finira afficher tous les éléments.
La première solution que je pense (s'il vous plaît suggérer d'autres personnes si elles sont de mieux en mieux) est à lier à cette collection (mais pas à l'aide d'un ItemsControl
) et de définir un DataTemplateSelector
classe dérivée (qui retourne l' DataTemplate
pour afficher le seul élément, ou la DateTemplate
qui a le ...
et le pop-up pour plus de détails, sur la base du nombre d'articles de la collection) et l'utiliser comme ContentTemplateSelector
.
Mais maintenant, ma question: comment à la fois de mon DataTemplate
ressemblerait en XAML, de sorte qu'ils peuvent afficher uniquement le premier élément de la collection? Évidemment, je ne peux pas avoir un ItemsControl
.
Mise à JOUR:
Maintenant, j'ai réussi à le faire fonctionner et acceptez cette question peut être fermé (je ne peux pas le supprimer plus puisqu'il y a déjà quelques réponses).
En fait je savais comment faire pour lier à un certain point dans la collection, mais ce n'était pas où je suis confus. J'ai senti que je devrais utiliser ContentControl
comme une réponse suggère. Mais je pensais que depuis que j'ai besoin de se lier à l'ensemble de la collection (de ne pas l'unique élément indexé), et l'utilisation d'un DataTemplateSelector
pour choisir le bon DataTemplate
basé sur le nombre d'éléments dans la collection. Le code devrait ressembler à ceci:
<ContentControl Content="{Binding MyCollection}"
ContentTemplateSelector="{StaticResource MyTemplateSelector}" />
Et dans MyTemplateSelector
je n'étais pas sûr de la façon de l'utiliser car il n'y a aucune référence à ma collection, car elle est définie comme ressource et il n'a pas l'information de MyCollection
. Cependant, il s'est avéré pour être très simple, le DataTemplate
peut se référer à un élément indexé sans connaître le nom ou toute autre référence. Tout simplement comme ceci:
<DataTemplate>
<TextBlock Text="{Binding [0].PropertyName}" />
<DataTemplate />
source d'informationauteur tete
Vous devez vous connecter pour publier un commentaire.
À se lier à un élément d'une collection, vous pouvez utiliser la syntaxe suivante:
Ou de se lier à une propriété d'un seul élément de la collection:
Vous pouvez en savoir plus sur la propriété du chemin de la syntaxe De liaison.Chemin D'Accès À La Propriété page MSDN à l'adresse... à partir de la page du lien:
Essayer cette
Ok, la fin de la partie, mais j'ai pensé que je devais partager mon 2 cents de toute façon: je ferais mieux d'aller avec un dumber (XAML)et une vue de modèle au plus proche de vos besoins de présentation.
Traduit: au lieu de la cartographie de l'existant de votre vue-modèle (ou données brutes) et sa collection d'objets directement à la vue, je suggère à la carte pour une vue appropriée-modèle montrant quelque chose comme un
YourItemViewModel FirstItem
de la propriété et unbool HasMore
de la propriété. Cette seconde vue-modèle serait de leurs tests unitaires pour s'assurer qu'il se comporte propertly, et serait facilement associées à une vue avec moins de logique, afin d'éviter d'éventuelles dur-à-essai de problèmes en vue.