DIFFERENCE BETWEEN OBSERVABLECOLLECTION AND BINDINGLIST IN WPF?

ben reitman

Total Post:96

Points:676
Posted by  ben reitman
WPF 
WPF
 3643  View(s)
Ratings:
Rate this:

I want to know the difference between ObservableCollection and BindingList because I've used both to notify for any add/delete change in Source, but I actually do not know when to prefer one over the other.

Why would I choose one of the following over the other?

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

or

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

  1. Pravesh Singh

    Post:412

    Points:2888
    Re: difference between ObservableCollection and BindingList in wpf?

    An ObservableCollection can be updated from UI exactly like any collection. The true difference is rather straightforward:

    ObservableCollection<T> implements INotifyCollectionChanged which provides notification when the collection is changed (you guessed ^^) It allows the binding engine to update the UI when the ObservableCollection is updated.

    However, BindingList<T> implements IBindingList.

    IBindingList provides notification on collection changes, but not only that. It provides a whole bunch of functionality which can be used by the UI to provide a lot more things than only UI updates according to changes, like:

    ·         Sorting

    ·         Searching

    ·         Add through factory (AddNew member function).

    ·         Readonly list (CanEdit property)

    All these functionalities are not available in ObservableCollection<T>

    Another difference is that BindingList relays item change notifications when its items implement INotifyPropertyChanged. If an item raises a PropertyChanged event, the BindingList will receive it an raises a ListChangedEvent with ListChangedType.ItemChanged and OldIndex=NewIndex (if an item was replaced, OldIndex=-1). ObservableCollection doesn't relay item notifications.

    Note that in Silverlight, BindingList is not available as an option: You can however use ObservableCollections and ICollectionView (and IPagedCollectionView if I remember well).

Answer

NEWSLETTER

Enter your email address here always to be updated. We promise not to spam!