2009-04-28 9 views
4

J'ai une instance de ObservableCollection liée à une liste déroulante WPF avec deux modèles de données distincts (un pour l'affichage, un pour l'édition). Le modèle de données à modifier comporte une liaison unidirectionnelle dans la zone de texte et un bouton Enregistrer.Comment mettre à jour un élément existant d'une ObservableCollection?

Quels changements dois-je faire pour que lorsque j'appuie sur le bouton Enregistrer (après avoir mis l'élément de liste en mode édition), la valeur change la zone de texte pour remplacer ObservableCollection (et l'affichage)?

Répondre

9

Les éléments de votre collection doivent être de type implémentant l'interface INotifyPropertyChanged. De cette façon, votre zone de liste sera notifiée que la valeur de la propriété dans votre objet élément unique a changé. ObservableCollection soulève événement CollectionChanged que lorsque les changements de collection (articles ajoutés, supprimés, etc.)

Citation de l'article de la bibliothèque MSDN sur ObservableCollection

Pour soutenir pleinement le transfert des données valeurs à partir d'objets de source de liaison à des objectifs contraignants , chaque objet de votre collection qui prend en charge les propriétés pouvant être liées doit implémenter une propriété appropriée a changé le mécanisme de notification tel que l'interface INotifyPropertyChanged.

+0

Merci de répondre. Je vais essayer cela et voir ce qui se passe. –

+1

J'ai implémenté l'interface INotifyPropertyChanged sur mes éléments de collection comme vous l'avez suggéré. Cela et en changeant les liaisons de OneWay à TwoWay semble avoir résolu mon problème. –

1

Pour la notification de changement de se produire dans une liaison entre un client lié et une source de données, votre type lié doit soit:

  • Mettre en oeuvre l'interface INotifyPropertyChanged (préféré).
  • Fournit un événement de modification pour chaque propriété du type lié.

Ne faites pas les deux.

Source: MSDN: INotifyPropertyChanged Interface

1

J'ai résolu le même problème en utilisant BindingList < classe T >.

L'événement ListChanged a été déclenché à la fois lors de la collecte et lors du changement d'élément individuel.

Introduit en .Net 3.5

Questions connexes