Autor Beitrag
Cjreek
Hält's aus hier
Beiträge: 13

Windows 7 64-Bit
C# (VS 2013), Delphi 2010
BeitragVerfasst: Di 22.12.15 10:54 
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 149
Erhaltene Danke: 27

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: 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.