247 votes

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 / de suppression dans Source, mais je ne sais pas quand en préférer un sur L'autre.

Pourquoi choisirais-je l'un des suivants par rapport à l'autre?

 ObservableCollection<Employee> lstEmp = new ObservableCollection<Employee>();
 

ou

 BindingList<Employee> lstEmp = new BindingList<Employee>();
 

288voto

Eilistraee Points 4959

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 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.

Toutefois, BindingList<T> implémente IBindingList.

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:

  • Tri
  • La recherche
  • Ajouter par le biais de l'usine (AddNew fonction de membre).
  • Readonly liste (CanEdit propriété)

Toutes ces fonctionnalités ne sont pas disponibles dans ObservableCollection<T>

Une autre différence est que l' BindingList relais de modification d'élément des notifications lorsque de ses éléments de mettre en oeuvre INotifyPropertyChanged. Si un élément soulève PropertyChanged événement, l' BindingList recevrez un soulève ListChangedEvent avec ListChangedType.ItemChanged et OldIndex=NewIndex (si un élément a été remplacé, OldIndex=-1). ObservableCollection n'a pas de relais de l'élément de notifications.

Notez que dans Silverlight, BindingList n'est pas disponible en option: Vous pouvez cependant utiliser ObservableCollections et ICollectionView (et IPagedCollectionView si je me souviens bien).

28voto

Dean Chalk Points 7935

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 pris en charge et vous ne l'utiliserez jamais vraiment dans un projet WPF à moins que vous ne le deviez vraiment.

4voto

Shift Points 310

Aussi intéressant de lire l'expérience de la personne suivante http://www.themissingdocs.net/wordpress/?p=465

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X