WPF DataGrid multiselect de liaison
J'ai un datagrid qui est multi-sélectionnez activé. J'ai besoin de changer la sélection dans le viewmodel. Cependant, la SelectedItems propriété est en lecture seule et ne peut pas être directement lié à une propriété dans le viewmodel. Alors, comment puis-je signal que la sélection a changé?
Voir aussi stackoverflow.com/questions/1579700/...
OriginalL'auteur JZ. | 2010-04-10
Vous devez vous connecter pour publier un commentaire.
Andy est correct. DataGridRow.IsSelected est une Propriété de Dépendance qui peut être lié aux données de contrôle de la sélection dans le ViewModel. L'exemple de code suivant illustre cela:
Assurez-vous de définir
EnableRowVirtualisation="False"
sur la grille de l'élément, sinon il y a un risque que la IsSelected liaisons automne détraqués.Merci. Espère que vous ne me dérange pas de m'ajouter
EnableRowVirtualisation="False"
à votre exemple, car sans elle, il y a un bug où la liaison n'est pas sur de nouvelles lignes.OriginalL'auteur Joseph Sturtevant
Je n'ai pas travaillé avec le
DataGrid
beaucoup, mais une technique qui fonctionne pour leListView
est à lier à laIsSelected
propriété de l'individuListViewItem
. Juste définir cetrue
pour chaque objet dans votre liste, et puis il va être sélectionné.Peut-être l'objet qui représente une ligne dans la
DataGrid
a aussi unIsSelected
de la propriété, et peut être utilisé de cette façon?OriginalL'auteur Andy
Les gars, merci pour l'aide. Mon problème a été résolu. Je pense que le problème est assez fréquent que les nouveaux développeurs WPF, alors je vais reformuler mon problème ainsi que la solution dans plus de détails ici au cas où quelqu'un d'autre s'exécute dans le même genre de problèmes.
Le problème: j'ai un multi-sélectionnez activé datagrid de fichiers audio. La grille a plusieurs en-têtes de colonne. L'utilisateur peut sélectionner plusieurs plusieurs ligne. Quand il clique sur le bouton de lecture, les fichiers audio sont lus dans l'ordre de un les en-têtes de colonnes (dire la colonne A). Lorsque la lecture commence, le multi-sélection est désactivée et que seul le fichier en cours de lecture est mis en surbrillance. Lorsque la lecture est terminée pour tous les fichiers, la multi-sélection s'affiche de nouveau. La lecture se fait dans le viewmodel. Comme vous pouvez le voir, il y a deux problèmes: 1) comment sélectionner le fichier en cours de lecture à partir de ce dernier, et 2) comment le signal de la vue à partir de ce dernier que la lecture est terminée, et ré-afficher la multi-sélection.
La solution: Pour résoudre le premier problème, j'ai créé une propriété du viewmodel qui est lié à la vue de la propriété SelectedIndex pour sélectionner le fichier en cours de lecture. Pour résoudre le deuxième problème, j'ai créé une propriété booléenne dans le modèle d'affichage pour indiquer que la lecture est terminée. Dans la vue de code derrière, je me suis abonné le la propriété booléenne de l'événement PropertyChanged. Dans le gestionnaire d'événements, le point de vue de la propriété SelectedItems) est re-créé à partir de l'sauvé multi-sélection (le contenu de SelectedItems a été enregistré dans une liste et SelectedItems a été effacé lors de la lecture d'commencé). Au début, j'avais du mal à re-création de SelectedItems. Il s'est avéré que le problème était dû au fait que la re-création a été initiée par le biais d'un deuxième thread. WPF ne le permet pas. La solution pour cela est d'utiliser le Répartiteur.Invoke() pour laisser le thread principal de faire le travail. Cela peut être très simple problème pour les développeurs expérimentés, mais pour les débutants, c'est un défi de taille. De toute façon, beaucoup d'aide de différentes personnes.
OriginalL'auteur JZ.
Suffit d'utiliser SelectedItems sur toute MultiSelector classe dérivée , et l'utilisation de méthodes d'Ajouter,Supprimer,Effacer sur IList il retourne .
Ce qui concerne ,
Robin
OriginalL'auteur Robin Teply