Comment mettre à jour un élément existant d'une ObservableCollection?
-
03-07-2019 - |
Question
J'ai une instance d'ObservableCollection liée à une zone de liste WPF avec deux modèles de données distincts (un pour l'affichage et un pour l'édition). Le modèle de données à modifier comporte une liaison unidirectionnelle dans la zone de texte et un bouton Enregistrer.
Quels changements dois-je apporter pour que, lorsque j'appuie sur le bouton Enregistrer (après avoir placé l'élément de liste en mode édition), la valeur je modifie la zone de texte pour remplacer la valeur dans ObservableCollection (et l'affichage)?
La solution
Les éléments de votre collection doivent être d'un type qui implémente l'interface INotifyPropertyChanged. De cette façon, votre zone de liste sera avertie que la valeur de la propriété de votre objet article unique a changé. ObservableCollection déclenche l'événement CollectionChanged uniquement lorsque la collection est modifiée (éléments ajoutés, supprimés, etc.)
Citation de l'article de la bibliothèque MSDN sur ObservableCollection
Pour prendre pleinement en charge le transfert de données les valeurs des objets source de liaison à des objectifs contraignants, chaque objet de votre collection qui prend en charge bindable les propriétés doivent implémenter un propriété appropriée a changé mécanisme de notification tel que le Interface INotifyPropertyChanged.
Autres conseils
Pour que la notification de modification se produise dans une liaison entre un client lié et une source de données, votre type lié doit soit:
- Implémentez INotifyPropertyChanged interface (préférée).
- Fournissez un événement de changement pour chaque propriété du type lié.
Ne faites pas les deux.
Source: MSDN: Interface INotifyPropertyChanged / p>
J'ai résolu un problème similaire en utilisant BindingList < T > classe.
L’événement ListChanged est déclenché à la fois lors de la collecte et du changement d’élément individuel.
Introduit dans .Net 3.5