2009-07-16 4 views
2

J'ai une zone de liste déroulante qui est databound à un ObservableCollection d'éléments. Je voudrais avoir un élément sélectionné par défaut qui est (None) qui définirait la valeur de la propriété que j'ai liée à "SelectedValue" à null.Ajout d'éléments aux éléments de databoundControl dans WPF

Je pense qu'il devrait y avoir un moyen d'y parvenir avec une combinaison de Style/DataTemplate/TemplateSelector. J'essaye de concevoir cela avec MVVM en tête, donc j'aimerais quelque chose qui n'utilise pas codebehind et qui soit aussi réutilisable que possible. J'aimerais aussi que les avantages de ObservableCollection (mise à jour de la collection provoquant la relance du contrôle) restent intacts.

Partie bonus B: Je souhaite également pouvoir ajouter un élément visuel supplémentaire en bas d'un ItemsControl. Je pensais qu'il serait facile de changer le DataTemplate si je savais comment le déclencher sur le dernier élément d'une collection. Disposé à divertir d'autres options ici.

Répondre

1

Le moyen le plus simple que j'ai trouvé pour faire ceci est d'insérer une valeur "spéciale" dans la collection sous-jacente, et d'afficher le texte "(Aucun)" quand il est sélectionné. Évidemment, vous devez exécuter votre liaison via un convertisseur pour prendre en compte cette valeur et retourner la valeur null lorsqu'elle est sélectionnée. (Voir this question de moi qui était le résultat de moi essayant d'ajouter une valeur nulle réelle à la collection sous-jacente d'un ComboBox.)

Cela dit, il pourrait effectivement être possible de faire ce que vous voulez avec la classe CompositeCollection. Vous pouvez créer une collection séparée (avec un seul élément - votre élément Null) et lier votre ComboBox à la fois à votre collection originale et à celle de CompositeCollection.

+0

J'ai déjà essayé. Je n'obtiens pas beaucoup de chance en liant la propriété "Collection" d'une CollectionContainer à une propriété de l'objet dans DataContext (par exemple CollectionContainer Collection = "{Binding TheItems}" />). Fonctionne très bien à partir d'une ressource statique si ... est-ce que je manque quelque chose ici? –

Questions connexes