Je tente de lier un dictionnaire à un ListView qui est le modèle d'élément constist d'une grille avec 2 zones de texte. Idéalement, j'aimerais pouvoir modifier à la fois la clé et la valeur du KeyValuePair affiché dans ListView. Est-ce possible?Dictionnaire à ListView Liaison TwoWay - possible?
Répondre
Ce que vous cherchez est quelque chose comme un ObservableCollection<T>
mais pour un dictionnaire. Un peu de recherche sur Google a trouvé ce qui suit de Dr. WPF on building an ObservableDictionary
:
Avantages et inconvénients
L'avantage d'utiliser un dictionnaire observable, bien sûr, est que le dictionnaire peut servir de ItemsSource pour un contrôle databound et vous pouvez toujours accéder au dictionnaire en code de la même manière que vous accédez à n'importe quel autre dictionnaire. C'est vraiment un dictionnaire indexé d'objets. Il y a certainement certaines limites inhérentes à l'idée même de rendre un dictionnaire observable. Les dictionnaires sont construits pour la vitesse. Lorsque vous importez les comportements d'une collection observable sur un dictionnaire afin que l'infrastructure puisse s'y lier, vous ajoutez un surcoût.
De même, un dictionnaire expose ses collections
Values
etKeys
via des propriétés distinctes du même nom. Ces collections sont des typesDictionary<TKey, TValue>.ValueCollection
etDictionary<TKey, TValue>.KeyCollection
, respectivement. Ces collections définies par CLR ne sont pas observables. En tant que tel, vous ne pouvez pas vous lier directement à la collection Values ou à la collection Keys et vous attendre à recevoir des notifications de changement de collection dynamique. Vous devez à la place vous lier directement au dictionnaire observable.
Maintenant, vous pouvez rencontrer un problème avec la mise à jour de la clé, que vous devrez alors convaincre en quelque sorte le dictionnaire Déplacer votre article. Je suggère de prendre le ObservableDictionary
de Dr. WPF et en utilisant plutôt un KeyedCollection
comme magasin de support. De cette façon, la clé est dérivée de l'élément lui-même, et les mises à jour déplacent l'objet dans le ObservableDictionary
automatiquement.
J'ai déjà vu ObservableDictionary auparavant, mais je n'ai pas eu de chance 2 -way liant à elle, principalement en raison de Key étant readonly – Maciek
C'est pour cette raison que vous devez utiliser le KeyedCollection, qui dérive la clé de l'élément. De cette façon, vous lier à la propriété de l'élément qui contient la clé et le dictionnaire sera mis à jour en conséquence (peut-être). – user7116
Si vous regardez l'implémentation KeyValuePair, il s'agit d'une struct avec les propriétés Key et Value en tant que readonly, donc je suppose qu'il n'est pas possible de faire une liaison TwoWay dans ce cas.
Si vous créez une classe qui hérite de INotifyPropertyChange et qui gère le dictionnaire, ajoutez et supprimez des éléments lorsque vous modifiez la clé ou modifiez uniquement la valeur lorsque vous modifiez la valeur, cela fonctionne peut-être.
- 1. Liaison de dictionnaire à ListView WPF
- 2. Liaison TwoWay avec UserControl
- 3. DependencyProperty avec la liaison TwoWay
- 4. Validation de liaison multiple de Twoway
- 5. Limitation de liaison de données WPF TwoWay
- 6. ASP.NET - Liaison ListView - Clarification
- 7. Liaison à un dictionnaire dans Silverlight avec INotifyPropertyChanged
- 8. Modèle Liaison d'un dictionnaire
- 9. Dictionnaire de liaison WPF <chaîne, Liste <string> à listView, ListBox comment?
- 10. Problème de liaison TwoWay WPF TexBox lorsque ValidationRules est utilisé
- 11. ListBox TwoWay lié à SelectedItem
- 12. Propriétés de dépendance personnalisées et liaison TwoWay dans WPF
- 13. WPF: Liaison TwoWay entre 4 TextBoxes et 1 Border.Margin
- 14. ListView DataTemplate liaison
- 15. LINQ to Objects - liaison à un ListView
- 16. Liste de liaison d'objets à WPF ListView
- 17. Liaison onScrolling écouteur à l'android ListView
- 18. La liaison ne fonctionne pas dans ListView
- 19. mélange OneTime et TwoWay liant
- 20. Liaison de données de liste au dictionnaire
- 21. Linq-to-SQL: liaison ListView
- 22. Liaison Wpf Combobox dans ListView
- 23. Liaison de données bidirectionnelle avec un dictionnaire dans WPF
- 24. Python: liaison/liaison des variables ensemble dans un dictionnaire
- 25. DataBinding à un Listview
- 26. WPF TwoWay Lier à la source actuelle avec Convertisseur?
- 27. Erreur de liaison ContentControl à l'image de ressources Dictionnaire
- 28. WPF Liaison à des éléments dans un dictionnaire par clé?
- 29. SimpleCursorAdapter - Liaison à plusieurs valeurs d'éléments dans ListView
- 30. WPF - Liaison à une liste dans un élément Listview
Oui, mais je ne peux pas trouver un moyen de le faire sans une classe intemedite, comme un ViewModel. Est-il d'une importance primordiale que vous vous liez directement au dictionnaire? – angrifel
C'est préféré. Le dictionnaire est censé contenir les paramètres de mon application et autres. – Maciek