I have asked this question on MSDN forums as well ... http://social.msdn.microsoft.com/Forums/en/wpf/thread/4493988a-9bd8-48fe-aff0-348502136a80
I need to know that why Microsoft suggests that BindingList
is not properly supported in WPF...
What is it that doesnt work with BindingList
in WPF? I find it pretty useful as it is. So far I personally have not found BindingList
any slower or a having more load on memory.
Plus WPF ItemsControls
, ItemsTemplates
, Styles
, Hierarchies
work great with BindingList
s too. They are equally observable.
Being a hardcore WPF developer myself and an ObservableCollection
fan, my faith is getting shaken by a been-there-done-that BindingList
....
Why should I use ObservableCollection
over BindingList?
(keeping aside INotifyPropertyChanged which both have to implement for item property changes)
This may be of interest:
http://www.themissingdocs.net/wordpress/?p=465
most important paragraphs:
But the implementation does not scale, it is slow, it performs terribly with larger lists. If your element type supports INotifyPropertyChanged, every time one of those elements raises the property changed event the entire list is walked to work out the index in the list of the item which raised the event! I was in shock when I first realised this. You see BindingList is truly just a rather thin wrapper over Collection, so there is no metadata associated with each entry, all of the binding of the element PropertyChanged event is directed to a single handler, and all it gets given is the source and the name of the changed property, so there is no way to include the NewIndex parameter in ListChangedEventArgs without doing a search. (By default this search even uses the default object comparator, so if you happen to have two different but sometimes equal objects in your list, enjoy the results…)
Another side note – AddNew, the other feature which BindingList has which Collection does not – also does not scale. It has to use IndexOf to find out where in the list the newly added item ended up in case it needs to cancel the add, because it supports auto sorting in derived types. (BindingList does not support auto sorting itself…)