I understand the way wpf supports automatic updates of DataGrids and Listboxes (ie adding new items and removing removed ones) is with the INotifyCollectionChanged interface that ObservableCollection implements. For some reason however I seem to be having complete success binding to an EntityCollection<T> from EntityFramework, which does not seem to implement INotifyCollectionChanged. Is there some other way WPF is doing this?
I’d just like to know how this is working.
EDIT
Here’s the relevant portion from the answer. The short form is that it “just works” with WPF and WinForms bindings.
EntityCollection currently does not
implement INotifyCollectionChanged,
which is the “new” standard interface
for notifying collection changes.
However, the binding list that you can
obtain for EntityCollection (and
which databinding will typically get
when you pass and EntityCollection
as a data source) is an IBindingList
which has its own “old” standard way
of notifying of collection changes
(namely, the ListChanged event). In
general, WinForms and WPF databinding
knows how to deal with this interface.
Apparently there was a bug filed on this, but it was closed as “by design” (atleast not for .NET 4).
As this post explains, EntityCollection effectively uses the “old” or WinForms way of list change notification, which uses IBindingList. While WPF uses the “new” INotifyCollectionChanged interface.
This blog post explains a good way to wrap an EntityCollection with a custom ListCollectionView, which you can assign to the ItemsSource property.