Entwickler-Ecke

WPF / Silverlight - Wie bekommt eine Listbox Änderungen an der ItemsSource mit?


Cjreek - Di 22.12.15 10:54
Titel: Wie bekommt eine Listbox Änderungen an der ItemsSource mit?
Hallo,

Ich bin gerade dabei ein eigenes Usercontrol zu schreiben und jetzt frage ich mich wie die ListBox mitbekommt, wenn sich an der ItemsSource etwas ändert,
denn ItemsSource ist als IEnumerable definiert und ich habe im Internet keine Möglichkeit gefunden diese zu observen ohne zu einem Zeitpunkt eine Kopie des Originals zu erstellen wodurch man Änderungen im Original Objekt natürlich nicht mitbekommt.

Letztendlich möchte ich mit meinem Control auch die Möglichkeit zulassen Items allgemein als IEnumerable zu übergeben, aber weiß nicht wie ich dann auf Änderungen darin reagieren kann.


doublecross - Mo 18.01.16 19:16

Hallo,

deine Datenquellen müssen INotifyPropertyChanged bzw. INotifyCollectionChanged implementieren und bei Änderungen das entsprechende Event auslösen.
Anstelle von List<T> also lieber ObservableCollection<T> verwenden :wink:.

Ich hoffe die Antwort hilft dir ein wenig.


Palladin007 - Mo 18.01.16 22:38

Ein IEnumerable ist grundsätzlich nicht änderbar, es ist also auch nicht sinnvoll, mit einem IEnumerable zu arbeiten, wenn Du eigentlich mehr brauchst.
Ich hätte mir an der Stelle auch ein IObservableCollection-Interface (ICollection<T> und INotifyCollectionChanged, nicht die Liste, die die ObservableCollection<T> letztendlich ist) gewünscht, aber das sieht Microsoft wohl etwas anders.

Du musst also - wie doublecross schon sagt - auf die ObservableCollection<T> zurück greifen.
Oder Du schreibst dir eine eigene Variante. INotifyPropertyChanged und INotifyCollectionChanged sind die Interfaces, die implementiert werden müssen, damit WPF dort horcht.