Ich habe viele Entitäten mit jeweils verschachtelten List<>
.
Zum Beispiel habe ich BaseEntity
was hat List<ColumnEntity>
.
ColumnEntity
Klasse hat List<Info>
und so weiter.
Wir arbeiten mit einer WPF- Benutzeroberfläche und müssen alle Änderungen in jeder Liste von verfolgen BaseEntity
. Es wird implementiert, indem a new ObservableCollection
basierend auf der benötigten Liste instanziiert und daran gebunden wird ObservableCollection
.
Was ändern sich die Vor- und Nachteile all diese verschachtelt Lists
zu ObservableCollections
? So können wir alle Änderungen an BaseEntity
sich verfolgen, ohne jede Liste einer BaseEntity
geänderten Bindung zuzuweisen ObservableCollection
?
Angenommen, es List
werden niemals spezifische Methoden verwendet.
Es kommt darauf an, was Sie damit meinen:
Wäre es ausreichend, Änderungen an Objekten zu verfolgen, die bereits in der Liste enthalten sind? Oder müssen Sie wissen, wann Objekte aus Positionen in der Liste entfernt / zu diesen hinzugefügt / geändert werden?
Wenn eine Liste während ihrer gesamten Lebensdauer dieselben Elemente enthält, sich jedoch die einzelnen Objekte in dieser Liste ändern, reicht es aus, wenn nur die Objekte Änderungsbenachrichtigungen auslösen (normalerweise bis
INotifyPropertyChanged
), und diesList<T>
ist ausreichend. Wenn die Liste jedoch von Zeit zu Zeit unterschiedliche Objekte enthält oder sich die Reihenfolge ändert, sollten Sie verwendenObservableCollection<T>
.Während die Unterschiede interessant sein mögen (und ein vorheriges Poster hat diese bereits behandelt), haben Sie normalerweise keine so große Auswahl - entweder Sie brauchen
ObservableCollection<T>
oder Sie tun es nicht.quelle
Liste stellt eine stark typisierte Liste von Objekten dar, auf die über den Index zugegriffen werden kann. Es bietet Methoden zum Suchen, Sortieren und Bearbeiten von Listen. Die List-Klasse ist das generische Äquivalent der ArrayList-Klasse. Es implementiert die generische IList-Schnittstelle mithilfe eines Arrays, dessen Größe nach Bedarf dynamisch erhöht wird.
ObservableCollection ist eine generische dynamische Datensammlung, die eine Schnittstelle "INotifyCollectionChanged" verwendet, um Benachrichtigungen bereitzustellen, wenn Elemente hinzugefügt, entfernt oder die gesamte Sammlung aktualisiert werden.
Lesen Sie mehr darüber in diesem Link: http://www.codeproject.com/Articles/42536/List-vs-ObservableCollection-vs-INotifyPropertyCha
quelle
Ein weiterer wichtiger Unterschied besteht darin, dass Sie auf ObservableCollection nur von einem Thread aus zugreifen können, für den es erstellt wurde, wobei auf die Liste von jedem Thread aus zugegriffen werden kann.
quelle
Ich sehe kein Problem damit, abgesehen von einem sehr geringen Leistungsaufwand.
Beachten Sie, dass Sie nicht über Änderungen benachrichtigt werden, wenn Sie die internen Listen direkt ändern. Auch wenn die in der ObservableCollection enthaltenen Objekte geändert werden, werden Sie nicht benachrichtigt. Die Benachrichtigung erfolgt nur, wenn Elemente hinzugefügt, ersetzt, entfernt oder verschoben werden.
quelle