Recall that the classic definition of a ViewModel in the MVVM pattern is that the “ViewModel is the Model provided for the View,” which is not necessarily sufficient to describe the power this object might acquire during an application’s development process.
The ViewModel should satisfy four principal requirements:
Provide the data that must be exposed in the View
Provide a set of commands available in the View
Implement the INotifyPropertyChanged interface
Implement the IDataErrorInfo interface
Of course, not all ViewModel implementations must satisfy all four requirements. Depending on the situation, it might not be necessary for a ViewModel to expose a set of ICommand commands, or implement the IDataErrorInfo interface (used for UI ...