In SoapBox Core , which is fully MVVM, I defined the IViewModel interface and the AbstractViewModel base class, which, as Nigel said, just implements INotifyPropertyChanged. (Note that SoapBox Core is WPF, not Silverlight, but in this case it is not very important. I did a similar job to Silverlight too.)
Then I defined more interfaces (e.g. IMenuItem) that inherit from IViewModel and more abstract classes that provide a basic implementation of these interfaces.
Now this takes into account the whole ViewModel tree, but, as you said, there is also a model tree. I spent almost a year working with MVVM now and here, my great insight: do not write a model. If you are building an application from scratch, just put everything in a ViewModel, otherwise you end up duplicating a ton of code.
The only cases when I was worried that I had a model when I used a third-party library that did not implement INotifyPropertyChanged, and therefore it is not easy to link. I believe that automatically generated code for entity frameworks may also occur here, but I noticed that some entity structures now provide you with the ability to implement INotifyPropertyChanged in the entities themselves.
Seriously, we need to rename it to the ViewModel template and make it with it. :)
source share