Wie aktualisiere ich ein vorhandenes Element eines ObservableCollection?
-
03-07-2019 - |
Frage
Ich habe eine Instanz von ObservableCollection an einen WPF ListBox gebunden mit zwei getrennten Datenschablonen (eine für die Anzeige, eine für die Bearbeitung). Die Datenvorlage zur Bearbeitung hat eine One-Way auf der Textbox-Bindung und eine Schaltfläche Speicher.
Welche Änderungen muss ich machen, so dass, wenn ich auf die Schaltfläche Speichern drücken (nach den Listeneintrag im Bearbeitungsmodus zu versetzen), der Wert I der Textbox ändern Sie den Wert in der ObservableCollection (und das Display) ersetzt?
Lösung
Gegenstände in Ihrer Sammlung sollte der Typ sein, der INotifyPropertyChanged-Schnittstelle implementiert. Auf diese Weise Ihres Listenfeld wird benachrichtigt, dass Eigenschaftswert in Ihrem Einzelelementobjekt geändert hat. ObservableCollection wirft Collection Ereignis nur dann, wenn Sammlung Änderungen (Elemente hinzugefügt, entfernt, etc.)
Zitat aus dem MSDN-Bibliothek Artikel über ObservableCollection
vollständig die Übertragung von Daten unterstützen Werte von den Bindungsquellenobjekte verbindliche Ziele, jedes Objekt in Ihrem Kollektion, die bindbare unterstützt Eigenschaften muss ein Gerät entsprechende Eigenschaft geändert Benachrichtigungsmechanismus, wie beispielsweise die INotifyPropertyChanged-Schnittstelle.
Andere Tipps
Für Benachrichtigung Änderung einer Bindung zwischen einem gebundenen Client und einer Datenquelle treten, Ihr gebundenen Typ soll entweder:
- Implementieren der INotifyPropertyChanged Schnittstelle (bevorzugt).
- Geben Sie eine Änderungsereignis für jeden Eigenschaft des gebundenen Typ.
Sie nicht beides tun.
Ich habe gelöst ähnliches Problem mit Binding
Es hat Listchanged Ereignis ausgelöst sowohl auf Sammlung und einzelne Position zu ändern.
Eingeführt in .NET 3.5