Diferencia entre ObservableCollection y BindingList

Quiero saber la diferencia entre ObservableCollection y BindingList porque he usado ambos para notificar cualquier cambio de agregar / borrar en Source, pero en realidad no sé cuándo preferir uno sobre el otro.

¿Por qué elegiría uno de los siguientes sobre el otro?

 ObservableCollection lstEmp = new ObservableCollection(); 

o

 BindingList lstEmp = new BindingList(); 

Un ObservableCollection se puede actualizar desde la interfaz de usuario exactamente como cualquier colección. La verdadera diferencia es bastante simple:

ObservableCollection implementa INotifyCollectionChanged que proporciona una notificación cuando se cambia la colección (supongo ^^) Permite que el motor de enlace actualice la UI cuando se actualiza el ObservableCollection .

Sin embargo, BindingList implementa IBindingList .

IBindingList proporciona notificaciones sobre los cambios en la recostackción, pero no solo eso. Proporciona una gran cantidad de funcionalidades que la IU puede usar para proporcionar muchas más cosas que solo las actualizaciones de IU de acuerdo con los cambios, como:

  • Clasificación
  • buscando
  • Agregar a través de fábrica (función Agregar miembro nuevo).
  • Lista de solo lectura (propiedad CanEdit)

Todas estas funcionalidades no están disponibles en ObservableCollection

Otra diferencia es que BindingList retransmite notificaciones de cambio de elemento cuando sus elementos implementan INotifyPropertyChanged . Si un elemento genera un evento PropertyChanged , BindingList lo recibirá y genera un ListChangedEvent con ListChangedType.ItemChanged y OldIndex=NewIndex (si se reemplazó un elemento, OldIndex=-1 ). ObservableCollection no retransmite notificaciones de elementos.

Tenga en cuenta que en Silverlight, BindingList no está disponible como una opción: sin embargo, puede utilizar ObservableCollection e ICollectionView (e IPagedCollectionView si recuerdo bien).

La diferencia práctica es que BindingList es para WinForms, y ObservableCollection es para WPF.

Desde una perspectiva de WPF, BindingList no está soportado adecuadamente, y nunca lo usarías realmente en un proyecto de WPF a menos que realmente tengas que hacerlo.

Una diferencia más grande entre ObservableCollection y BindingList que es útil, y puede ser un factor de decisión de puja sobre el tema:

BindingList List Change Handler:

BindingList List Change

Cambio en la colección ObservableCollection :

Colección de colección de objetos cambiables

Breve de arriba: Si se cambia una propiedad de un artículo en BindingList , el evento ListChanged le dará detalles completos de la propiedad (en PropertyDescriptor) y ObservableCollection no le dará eso. De hecho, ObservableCollection no generará un evento de cambio para una propiedad modificada en un artículo.

La conclusión anterior se refiere a INotifyPropertyChanged implementado en clases de modelo. Por defecto, ninguno aumenta el evento cambiado si se cambia una propiedad en un elemento.