ObservableCollection<T> is the default implementation, ie: wouldn't it be a bit strange to create the interface INotifyCollectionChanged and not have a default implementation?

 

Also, you would implement 'Moo' in your case as a Collection<T> not List<T>.

 

I believe ObservableCollection<T> also supports property change notifications as well.