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 ObservableCollection
s et ICollectionView
(et IPagedCollectionView
si je me souviens bien).