Un ObservableCollection
se puede actualizar desde la interfaz de usuario exactamente igual que cualquier colección. La verdadera diferencia es bastante sencillo:
ObservableCollection<T>
implementa INotifyCollectionChanged
que proporciona una notificación cuando se cambia la colección (adivinaste ^^) Permite que el motor de enlace para actualizar la interfaz de usuario cuando el ObservableCollection
se actualiza.
Sin embargo, BindingList<T>
implementa IBindingList
.
IBindingList
proporciona una notificación sobre los cambios en la recopilación, pero no solo eso. Proporciona un montón de funcionalidad que puede ser utilizado por la interfaz de usuario para proporcionar una gran cantidad más cosas que sólo las actualizaciones de la interfaz de usuario de acuerdo con los cambios, como:
- Clasificación
- Buscando
- Añadir través de la fábrica (miembro AñadirNuevo función).
- lista de solo lectura (por CanEdit propiedad)
Todas estas funcionalidades no están disponibles en ObservableCollection<T>
Otra diferencia es que BindingList
relés notificaciones de cambio de artículo al poner en práctica sus artículos INotifyPropertyChanged
. Si un artículo genera un evento PropertyChanged
, el BindingList
lo recibirá con un aumento de ListChangedEvent
con ListChangedType.ItemChanged
y OldIndex=NewIndex
(si se reemplazó un artículo, OldIndex=-1
). ObservableCollection
no retransmite notificaciones de elementos.
Nótese que en Silverlight, BindingList
no está disponible como una opción: Sin embargo, puede utilizar ObservableCollection
s y ICollectionView
(y IPagedCollectionView
si no recuerdo mal).
+1 para una respuesta excelente – Justin
Awesome answer man. Seguid así. –
Otra cosa a considerar es el rendimiento, consulte: http://www.themissingdocs.net/wordpress/?p=465 –