Différence entre ObservableCollection et BindingList
Je veux connaître la différence entre ObservableCollection et BindingList parce que j'ai utilisé les deux pour notifier tout changement d'Ajout/Suppression dans la Source, mais je ne sais pas quand préférer l'un à l'autre.
Pourquoi choisirais-je l'une des options suivantes plutôt que l'autre?
ObservableCollection<Employee> lstEmp = new ObservableCollection<Employee>();
Ou
BindingList<Employee> lstEmp = new BindingList<Employee>();
3 réponses
Un ObservableCollection peut être mis à jour à partir de l'INTERFACE utilisateur exactement comme n'importe quelle collection. La vraie différence est plutôt simple:
ObservableCollection<T> implémente INotifyCollectionChanged qui fournit une notification lorsque la collection est modifiée (vous l'avez deviné ^^)
Il permet au moteur de liaison de mettre à jour l'interface utilisateur lorsque ObservableCollection est mis à jour.
Cependant, BindingList<T> implémente IBindingList.
IBindingList fournit une notification sur les modifications de collection, mais pas seulement cela. Il fournit tout un tas de fonctionnalités qui peuvent être utilisées par le UI pour fournir beaucoup plus de choses que seules les mises à jour de L'interface utilisateur en fonction des changements, comme:
- Tri
- recherche
- ajouter par usine (AddNew membre fonction).
- liste en lecture seule (Propriété CanEdit)
Toutes ces fonctionnalités ne sont pas disponibles dans ObservableCollection<T>
Une autre différence est que BindingList transmet les notifications de modification d'élément lorsque ses éléments implémentent INotifyPropertyChanged. Si un élément déclenche un événement PropertyChanged, le BindingList recevra un événement déclenche un ListChangedEvent avec ListChangedType.ItemChanged et OldIndex=NewIndex (si un élément a été remplacé, OldIndex=-1). ObservableCollection ne relaie pas les notifications d'éléments.
Notez que dans Silverlight, BindingList n'est pas disponible en option: Vous pouvez cependant utiliser les ObservableCollections et ICollectionView (et IPagedCollectionView, si je me souviens bien).
La différence pratique est que BindingList est pour WinForms, et ObservableCollection est pour WPF.
D'un point de vue WPF, BindingList n'est pas correctement supporté, et vous ne l'utiliseriez jamais vraiment dans un projet WPF sauf si vous le deviez vraiment.
Encore une grande différence entre ObservableCollection et BindingList qui est pratique, et peut être un facteur de décision d'enchère sur le sujet:
BindingList Gestionnaire De Changement De Liste:
ObservableCollection changement de Collection:
Bref de ce qui précède: si une propriété d'un élément est modifiée dans
BindingList, l'événementListChangedvous donnera des détails complets de la propriété (dans PropertyDescriptor) etObservableCollectionne donnera pas vous qui. EffectivementObservableCollectionne déclenche pas l'événement change pour une propriété modifié dans un élément.
La conclusion ci-dessus concerne INotifyPropertyChanged mis en œuvre dans les classes de modèle. Par défaut, none déclenche l'événement modifié si une propriété est modifiée dans un élément.

