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?

War es hilfreich?

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.

Quelle: MSDN: INotifyPropertyChanged Schnittstelle

Ich habe gelöst ähnliches Problem mit Binding Klasse.

Es hat Listchanged Ereignis ausgelöst sowohl auf Sammlung und einzelne Position zu ändern.

Eingeführt in .NET 3.5

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top