À quoi sert ObservableCollection dans .net?
c#
.net
observablecollection
santosh singh
la source
la source
Réponses:
ObservableCollection est une collection qui permet au code en dehors de la collection de savoir quand des modifications de la collection (ajouter, déplacer, supprimer) se produisent. Il est largement utilisé dans WPF et Silverlight mais son utilisation ne s'y limite pas. Le code peut ajouter des gestionnaires d'événements pour voir quand la collection a changé, puis réagir via le gestionnaire d'événements pour effectuer un traitement supplémentaire. Cela peut changer une interface utilisateur ou effectuer une autre opération.
Le code ci-dessous ne fait rien mais montre comment attacher un gestionnaire dans une classe, puis utiliser les arguments d'événement pour réagir d'une manière ou d'une autre aux modifications. WPF a déjà de nombreuses opérations comme l'actualisation de l'interface utilisateur intégrée afin que vous les obteniez gratuitement lorsque vous utilisez ObservableCollections
la source
e.NewItems
&e.OldsItems
peut être nul en fonction de l'action. Ça peut jeterNullReferenceException
.Un
ObservableCollection
fonctionne essentiellement comme une collection régulière, sauf qu'il implémente les interfaces:INotifyCollectionChanged
,INotifyPropertyChanged
En tant que tel, il est très utile lorsque vous souhaitez savoir quand la collection a changé. Un événement est déclenché qui indiquera à l'utilisateur quelles entrées ont été ajoutées / supprimées ou déplacées.
Plus important encore, ils sont très utiles lors de l'utilisation de la liaison de données sur un formulaire.
la source
À partir de Pro C # 5.0 et du .NET 4.5 Framework
La
ObservableCollection<T>
classe est très utile en ce qu'elle a la capacité d'informer les objets externes lorsque son contenu a changé d'une manière ou d'une autre (comme vous pouvez le deviner, travailler avecReadOnlyObservableCollection<T>
est très similaire, mais en lecture seule dans la nature). À bien des égards, travailler avecObservableCollection<T>
est identique à travailler avecList<T>
, étant donné que ces deux classes implémentent les mêmes interfaces principales. Ce qui rend laObservableCollection<T>
classe unique, c'est que cette classe prend en charge un événement nomméCollectionChanged
. Cet événement se déclenche chaque fois qu'un nouvel élément est inséré, un élément actuel est supprimé (ou déplacé), ou si la collection entière est modifiée. Comme tout événement, CollectionChanged est défini en termes de délégué, ce qui est le cas dans ce casNotifyCollectionChangedEventHandler
. Ce délégué peut appeler n'importe quelle méthode qui prend un objet comme premier paramètre et unNotifyCollectionChangedEventArgs
comme deuxième. Considérez la méthode Main () suivante, qui remplit une collection observable contenant des objets Person et relie l'CollectionChanged
événement:Le
NotifyCollectionChangedEventArgs
paramètre entrant définit deux propriétés importantesOldItems
etNewItems
qui vous donneront une liste des éléments qui étaient actuellement dans la collection avant le déclenchement de l'événement et les nouveaux éléments qui ont été impliqués dans la modification. Cependant, vous souhaiterez examiner ces listes uniquement dans les circonstances appropriées. Rappelez-vous que l'événement CollectionChanged peut se déclencher lorsque des éléments sont ajoutés, supprimés, déplacés ou réinitialisés. Pour découvrir laquelle de ces actions a déclenché l'événement, vous pouvez utiliser la propriété Action de NotifyCollectionChangedEventArgs. La propriété Action peut être testée par rapport à l'un des membres suivants de l'NotifyCollectionChangedAction
énumération:la source
Explication sans code
Pour ceux qui veulent une réponse sans aucun code (boom-tish), je lèverai la main:
Collections normales - Aucune notification
De temps en temps, je vais à New York et ma femme me demande d'acheter des trucs. Je prends donc une liste de courses avec moi. La liste contient beaucoup de choses comme:
hahaha eh bien je n'achète pas ces trucs. Alors je les raye et les supprime de la liste et j'ajoute à la place:
Je rentre donc généralement sans les marchandises et elle n'est jamais contente. Le fait est qu'elle ne sait pas ce que je retire de la liste et ce que j'y ajoute; elle ne reçoit aucune notification.
The ObservableCollection - notifications lorsque des modifications sont apportées
Maintenant, chaque fois que je retire quelque chose de la liste: elle reçoit une notification sur son téléphone (sms / email, etc.)!
La collection observable fonctionne de la même manière. Si vous y ajoutez ou en supprimez quelque chose: quelqu'un en est informé. Et quand ils sont informés, eh bien ils vous appellent et vous en aurez plein l'oreille. Bien sûr, les conséquences sont personnalisables via le gestionnaire d'événements.
Cela résume tout!
la source
L'une des plus grandes utilisations est que vous pouvez lier des composants d'interface utilisateur à un, et ils répondront de manière appropriée si le contenu de la collection change. Par exemple, si vous liez une ItemSource d'un ListView à un, le contenu du ListView sera automatiquement mis à jour si vous modifiez la collection.
EDIT: Voici un exemple de code de MSDN: http://msdn.microsoft.com/en-us/library/ms748365.aspx
En C #, accrocher la ListBox à la collection peut être aussi simple que
cependant, si vous n'avez pas connecté la liste en tant que ressource statique et défini NameItemTemplate, vous souhaiterez peut-être remplacer ToString () de PersonName. Par exemple:
la source
c'est une collection qui est utilisée pour notifier principalement l'interface utilisateur de changer dans la collection, elle prend en charge la notification automatique.
Principalement utilisé dans WPF,
Où supposons que vous ayez une interface utilisateur avec une zone de liste et un bouton d'ajout et que lorsque vous cliquez sur le bouton, un objet de type suppose que personne sera ajouté à la collection obseravable et que vous liez cette collection à ItemSource de Listbox, donc dès que vous avez ajouté un nouvel élément dans la collection, Listbox se mettra à jour automatiquement et y ajoutera un élément.
la source
la source