Différence entre ObservableCollection et BindingList
Je veux savoir la différence entre ObservableCollection
et BindingList
parce que j'ai utilisé à la fois pour informer de tout ajout/suppression de changement de la Source, mais je ne sais pas quand à préférer l'un sur l'autre.
Pourquoi devrais-je choisir l'une des opérations suivantes sur les autres?
ObservableCollection<Employee> lstEmp = new ObservableCollection<Employee>();
ou
BindingList<Employee> lstEmp = new BindingList<Employee>();
Vous devez vous connecter pour publier un commentaire.
Un
ObservableCollection
peut être mis à jour à partir de l'INTERFACE utilisateur exactement comme n'importe quelle collection. La vraie différence est assez simple:ObservableCollection<T>
implémenteINotifyCollectionChanged
qui fournit la notification lorsque la collection est changé (vous l'aurez deviné ^^)Il permet au moteur de liaison de mise à jour de l'INTERFACE utilisateur lorsque l'
ObservableCollection
est mis à jour.Cependant,
BindingList<T>
implémenteIBindingList
.IBindingList
fournit une notification sur la collecte des changements, mais pas seulement. Il offre tout un tas de fonctionnalités qui peuvent être utilisées par l'INTERFACE utilisateur de fournir beaucoup plus de choses que seulement l'INTERFACE de mises à jour en fonction des changements, comme:Toutes ces fonctionnalités ne sont pas disponibles dans
ObservableCollection<T>
Une autre différence est que
BindingList
relais de modification d'élément des notifications lorsque de ses éléments de mettre en œuvreINotifyPropertyChanged
. Si un article soulève unPropertyChanged
événement, leBindingList
recevrez un soulève unListChangedEvent
avecListChangedType.ItemChanged
etOldIndex=NewIndex
(si un élément a été remplacé,OldIndex=-1
).ObservableCollection
n'a pas de relais de l'élément de notifications.Noter que dans Silverlight,
BindingList
n'est pas disponible en option: Vous pouvez cependant utiliserObservableCollection
s etICollectionView
(etIPagedCollectionView
si je me souviens bien).La pratique, la différence est que BindingList est pour WinForms, et ObservableCollection est pour WPF.
De WPF point de vue, BindingList n'est pas correctement pris en charge, et vous ne serait jamais vraiment l'utiliser dans un projet WPF, sauf si vous avez vraiment eu de.
Un Plus grande différence entre
ObservableCollection
etBindingList
qui vient à portée de main, et peut être une offre facteur de décision sur le sujet :BindingList
Le Changement Liste Du Gestionnaire:ObservableCollection
Collection de changement:Conclusion ci-dessus en ce qui concerne de
INotifyPropertyChanged
mis en œuvre dans les classes du modèle. Par défaut, aucune soulève l'événement a changé si une propriété est modifiée dans un élément.Les différences les plus importantes telles que les caractéristiques et les notifications de changement sur le contenu des éléments déjà mentionnés par le a accepté de répondre mais il y a plus d', qui a également lieu de mentionner:
Performance
Quand
AddNew
est appelé,BindingList<T>
recherche pour l'ajout de l'élément par unIndexOf
de recherche. Et siT
implémenteINotifyPropertyChanged
l'indice d'un changement de l'élément est également recherché parIndexOf
(même si il n'y a pas de nouvelles de recherche, tant que le même élément de modifications à plusieurs reprises). Si vous stockez des milliers d'éléments dans la collection, puisObservableCollection<T>
(ou personnaliséIBindingList
mise en œuvre avec O(1) recherche de prix, cela peut être plus préférable.L'exhaustivité
La
IBindingList
interface est énorme (peut-être pas le plus propre conception) et permet aux développeurs d'implémenter uniquement un sous-ensemble de ses fonctionnalités. Par exemple, leAllowNew
,SupportsSorting
etSupportsSearching
propriétés dire siAddNew
,ApplySort
etFind
méthodes peuvent être utilisées, respectivement. Il surprend souvent les gens quiBindingList<T>
lui-même ne prend pas en charge le tri. En fait il fournit des méthodes virtuelles de laisser les classes dérivées ajouter les fonctionnalités manquantes. LeDataView
classe est un exemple pour un pleinIBindingList
mise en œuvre; cependant, il n'est pas typé collections en premier lieu. Et leBindingSource
classe en WinForms est un hybride exemple: il prend en charge le tri si il enveloppe un autreIBindingList
mise en œuvre, qui prend en charge le tri.ObservableCollection<T>
est déjà une mise en œuvre complète de laINotifyCollectionChanged
de l'interface (qui n'a qu'un seul cas). Il a également des membres virtuels maisObservableCollection<T>
est habituellement obtenue pour la même raison que sa baseCollection<T>
classe: pour la personnalisation ajouter/supprimer des éléments (par exemple. dans un modèle de données de la collection) plutôt que d'adapter les fonctionnalités de liaison.Copier ou d'emballage
Les deux
ObservableCollection<T>
etBindingList<T>
avoir un constructeur qui accepte une liste déjà existante. Bien qu'ils se comportent différemment lorsqu'ils sont instanciés par une autre collection:BindingList<T>
agit comme un fait observable wrapper pour la liste fournie, et les modifications effectuées sur leBindingList<T>
pourra être répercuté sur le sous-jacent de la collection ainsi.ObservableCollection<T>
sur l'autre main passe un nouveauList<T>
instance de la base deCollection<T>
constructeur et copie les éléments de la collection originale dans cette nouvelle liste. Bien sûr, siT
est un type de référence des modifications sur les éléments seront visibles à partir de la collection d'origine, mais la collection elle-même ne sera pas mis à jour.