Databinding une ListBox avec SelectionMode = Plusieurs
J'ai un WPF ListBox
que je voudrais
- Activer la sélection multiple dans la
ListBox
, et - Databind la liste pour mon modèle de vue.
Ces deux conditions semblent être incompatibles. Mon point de vue, le modèle a une ObservableCollection<T>
propriété de se lier à cette zone de liste; j'ai mis en place une liaison dans le code XAML de la propriété à la ListBox.SelectedItems
de la propriété. Lorsque j'ai compilé, j'ai une erreur disant que le SelectedItems
propriété est en lecture seule et ne pouvait pas être défini à partir de XAML.
Suis-je la liaison à un mauvais contrôle de la propriété? Est-il un moyen de se lier à une sélection multiple zone de liste dans le code XAML pour un modèle de vue de la collecte de la propriété? Merci pour votre aide.
OriginalL'auteur David Veeneman | 2010-03-24
Vous devez vous connecter pour publier un commentaire.
Ce que vous pouvez faire pour contourner ce problème:
Créer un IsSelected de propriété sur les éléments que vous êtes en affichage dans la liste. Im en supposant que ce sont représentés par un modèle de vue. Donc il ne devrait pas être un drame ajouter un supplément de propriété. Si elles ne sont que des objets d'affaires de considérer l'utilisation d'une classe wrapper de sans douleur les envelopper d'afficher les éléments de modèle (shameless plug - ici est un tel système. Je l'utilise au quotidien pour envelopper mon business objects)
Utiliser un conteneur éléments de style de lier la propriété IsSelected de l'élément de zone de liste à la propriété IsSelected des articles que vous êtes en affichage, comme
(peut-être besoin d'un basé sur l'attribut sur le style, pas sûr)
Maintenant chaque fois qu'un élément de zone de liste est sélectionné votre modèle de vue va le savoir et peut mettre à jour son système interne de collecte tel que requis.
Le IsSelected de la propriété est une valeur de type Boolean.
C'est une très belle solution. Juste au cas où, pour un contrôle DataGrid, le Xaml est : <DataGrid.RowStyle> <Style TargetType="{x:Type de DataGridRow}" > ... </Style> </DataGrid.RowStyle>
OriginalL'auteur Aran Mulholland
J'ai fini par utiliser un peu de code-behind dans un gestionnaire d'événements SelectionChanged pour définir le modèle de vue de la propriété. Plus simple que de créer un objet de la demande.
OriginalL'auteur David Veeneman
J'ai posté une technique pour permettre une lecture que la liaison à la
SelectedItems
propriété de WPF DataGrid en prolongeant simplement la grille de données qui, je crois, pourrait facilement être co-opté pour une zone de liste. Vous pouvez voir mon post à https://stackoverflow.com/a/16953833/62278OriginalL'auteur Brian Hinchey