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)?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top