I’ve read on msdn that it is common for Models in MVVM to implement interfaces such as ObservableCollection<T>, INotifyPropertyChanged, and IDataError.
My question is around why this is done at the model level and not the ViewModel level. I would expect that a “pure” Model would not have any notification logic, just data and business logic. My first impression is that the VM would wrap the Model’s properties and take care of the notifications.
I readily admit that implementing these interfaces in the Model may make implementation easier in many cases, but I’m looking for an explanation as to why the model should be responsible for notifications.
INPC is part of the Core framework unlike say ICommand and DependencyObject which belong to WPF specifically. There was a similar question regarding exposing IQueryable from the service layer. Just like INPC, IQueryable is a core framework class. Not using either of them in an effort to create a pure model is overkill.
Even worse it causes duplication (making the VM wrap expose properties just to add a propertychanged notification).
Observable Collection on the other hand is a different beast. Usually collections in a domain model represent entity relations. In many cases, you don’t have control over their instantiation. There’s a tradeoff to be made there