Was ist die Verwendung von ObservableCollection in .net?
c#
.net
observablecollection
Santosh Singh
quelle
quelle
Antworten:
ObservableCollection ist eine Sammlung, mit der Code außerhalb der Sammlung erkennen kann, wann Änderungen an der Sammlung (Hinzufügen, Verschieben, Entfernen) auftreten. Es wird häufig in WPF und Silverlight verwendet, ist jedoch nicht auf diese beschränkt. Code kann Ereignishandler hinzufügen, um zu sehen, wann sich die Sammlung geändert hat, und dann über den Ereignishandler reagieren, um eine zusätzliche Verarbeitung durchzuführen. Dies kann eine Benutzeroberfläche ändern oder eine andere Operation ausführen.
Der folgende Code bewirkt eigentlich nichts anderes, zeigt jedoch, wie Sie einen Handler in einer Klasse anhängen und dann die Ereignisargumente verwenden, um auf die Änderungen zu reagieren. In WPF sind bereits viele Vorgänge wie das Aktualisieren der Benutzeroberfläche integriert, sodass Sie diese bei Verwendung von ObservableCollections kostenlos erhalten
quelle
e.NewItems
&e.OldsItems
kann je nach Aktion null sein. Es kann werfenNullReferenceException
.Ein
ObservableCollection
funktioniert im Wesentlichen wie eine reguläre Sammlung, außer dass es die Schnittstellen implementiert:INotifyCollectionChanged
,INotifyPropertyChanged
Daher ist es sehr nützlich, wenn Sie wissen möchten, wann sich die Sammlung geändert hat. Es wird ein Ereignis ausgelöst, das dem Benutzer mitteilt, welche Einträge hinzugefügt / entfernt oder verschoben wurden.
Noch wichtiger ist, dass sie sehr nützlich sind, wenn Sie die Datenbindung in einem Formular verwenden.
quelle
Ab Pro C # 5.0 und .NET 4.5 Framework
Die
ObservableCollection<T>
Klasse ist insofern sehr nützlich, als sie externe Objekte informieren kann, wenn sich ihr Inhalt auf irgendeine Weise geändert hat (wie Sie sich vorstellen können, ist die Arbeit mitReadOnlyObservableCollection<T>
sehr ähnlich, aber schreibgeschützt). In vielerlei Hinsicht ist das Arbeiten mit demObservableCollection<T>
identisch mit dem Arbeiten mitList<T>
, da beide Klassen dieselben Kernschnittstellen implementieren. Was dieObservableCollection<T>
Klasse einzigartig macht, ist, dass diese Klasse ein Ereignis mit dem Namen unterstütztCollectionChanged
. Dieses Ereignis wird ausgelöst, wenn ein neues Element eingefügt, ein aktuelles Element entfernt (oder verschoben) oder wenn die gesamte Sammlung geändert wird. Wie jedes Ereignis wird CollectionChanged als Delegat definiert, in diesem FallNotifyCollectionChangedEventHandler
. Dieser Delegat kann jede Methode aufrufen, die ein Objekt als ersten Parameter verwendet, und aNotifyCollectionChangedEventArgs
als der zweite. Betrachten Sie die folgende Main () -Methode, die eine beobachtbare Sammlung mit Personenobjekten auffüllt und dasCollectionChanged
Ereignis verkabelt:Der eingehende
NotifyCollectionChangedEventArgs
Parameter definiert zwei wichtige Eigenschaften:OldItems
undNewItems
gibt Ihnen eine Liste der Elemente, die sich vor dem Auslösen des Ereignisses derzeit in der Sammlung befanden, sowie der neuen Elemente, die an der Änderung beteiligt waren. Sie sollten diese Listen jedoch nur unter den richtigen Umständen überprüfen. Denken Sie daran, dass das CollectionChanged-Ereignis ausgelöst werden kann, wenn Elemente hinzugefügt, entfernt, verschoben oder zurückgesetzt werden. Um herauszufinden, welche dieser Aktionen das Ereignis ausgelöst hat, können Sie die Action-Eigenschaft von NotifyCollectionChangedEventArgs verwenden. Die Action-Eigenschaft kann gegen eines der folgenden Mitglieder derNotifyCollectionChangedAction
Aufzählung getestet werden:quelle
Erklärung ohne Code
Für diejenigen, die eine Antwort ohne Code wollen (Boom-Tish), werde ich meine Hand erheben:
Normale Sammlungen - Keine Benachrichtigungen
Hin und wieder gehe ich nach NYC und meine Frau bittet mich, Sachen zu kaufen. Also nehme ich eine Einkaufsliste mit. Die Liste enthält viele Dinge wie:
hahaha gut, ich kaufe das Zeug nicht. Also streiche ich sie ab und entferne sie von der Liste und füge stattdessen hinzu:
Also komme ich normalerweise ohne die Ware nach Hause und sie ist nie zufrieden. Die Sache ist, dass sie nicht weiß, was ich von der Liste streichen und was ich dazu hinzufüge; Sie erhält keine Benachrichtigungen.
Die ObservableCollection - Benachrichtigungen bei vorgenommenen Änderungen
Wenn ich jetzt etwas von der Liste entferne: Sie erhält eine Benachrichtigung auf ihrem Telefon (z. B. SMS / E-Mail usw.)!
Die beobachtbare Sammlung funktioniert genauso. Wenn Sie etwas hinzufügen oder entfernen, wird jemand benachrichtigt. Und wenn sie benachrichtigt werden, rufen sie dich an und du bekommst ein Ohr voll. Natürlich können die Konsequenzen über den Event-Handler angepasst werden.
Das fasst alles zusammen!
quelle
Eine der größten Verwendungsmöglichkeiten besteht darin, dass Sie UI-Komponenten an eine binden können. Diese reagieren angemessen, wenn sich der Inhalt der Sammlung ändert. Wenn Sie beispielsweise die ItemsSource einer ListView an eine binden, wird der Inhalt der ListView automatisch aktualisiert, wenn Sie die Sammlung ändern.
BEARBEITEN: Hier ist ein Beispielcode von MSDN: http://msdn.microsoft.com/en-us/library/ms748365.aspx
In C # kann das Verknüpfen der ListBox mit der Sammlung so einfach sein wie
Wenn Sie die Liste jedoch nicht als statische Ressource verknüpft und NameItemTemplate definiert haben, möchten Sie möglicherweise ToString () von PersonName überschreiben. Beispielsweise:
quelle
Es handelt sich um eine Sammlung, die verwendet wird, um hauptsächlich die Benutzeroberfläche über Änderungen in der Sammlung zu benachrichtigen. Sie unterstützt die automatische Benachrichtigung.
Hauptsächlich in WPF verwendet,
Angenommen, Sie haben eine Benutzeroberfläche mit einem Listenfeld und einer Schaltfläche zum Hinzufügen. Wenn Sie auf die Schaltfläche klicken, wird der beobachtbaren Sammlung ein Objekt vom Typ "Angenommene Person" hinzugefügt, und Sie binden diese Sammlung an die ItemSource der Listbox, sobald Sie eine hinzugefügt haben Als neues Element in der Sammlung aktualisiert sich Listbox selbst und fügt ein weiteres Element hinzu.
quelle
quelle