A quick overview of MVVM
Model View ViewModel (MVVM) is a design pattern based on Model View Controller (MVC) but specifically tailored to Windows Presentation Foundation (WPF).
MVVM is not a framework per se but many frameworks have been created. Here is a list of MVVM Frameworks from Wikipedia.
- Josh Smith. “MVVM Foundation”.
- Sacha Barber. “Cinch.”.
- Daniel Vaughan. “Calcium SDK”.
- Karl Shifflett. “Ocean”.
- Tony Sneed. “Simple MVVM Toolkit”.
- Laurent Bugnion. “MVVM Light Toolkit”.
- Eye.Soft. “Hyperion SDK”.
- Lester Lobo. “CoreMVVM”.
- Paul Betts. “ReactiveUI”.
- Rob Eisenberg. “Caliburn”.
- Rob Eisenberg. “Caliburn Micro”.
- William e Kempf. “Onyx”.
- Peter O’Hanlon. “GoldLight”.
- jbe. “WPF Application Framework (WAF)”.
- WPF Team. “WPF Model-View-ViewModel Toolkit”.
- Brett Hickenbottom. “Structured MVVM”.
- Michael L Perry. “Update Controls”.
- Steve Sanderson. “KnockoutJS”.
- Geert van Horrik. “Catel”.
- Jeremy Likness. “Jounce”.
-
Rhea NV (Visual Studio Partner). “Vidyano”.
-
Intersoft Solutions (Visual Studio Partner). “ClientUI”.
See the Wikipedia site here: Open Source MVVM Frameworks.
Another blog, has some basic information on many of these here: A quick tour of existing MVVM frameworks
A framework is actually not necessary to implement MVVM and you should seriously consider whether using one is right for your WPF application or not. Many applications do not need much of the features the frameworks provide. However, there are two common classes that all MVVM frameworks contain. These are ViewModelBase and RelayCommand. Though some frameworks may give them different names or implement them slightly differently, they all have these classes. For example, MVVM Foundation names the ViewModelBase differently. It is called ObservableObject, which is more appropriate because it is incorrect to assume that all objects that implement INotifyPropertyChanged are going to be ViewModel objects.
Instead of installing and using an MVVM framework, you could simply include these classes in your application, as these are all you need to implement MVVM.
- ObservableObject
- RelayCommand
While these two classes are enough, you may want to investigate how different MVVM Frameworks implement and what else they implement and why. You may find that another feature implemented is exactly what you need in your application and knowing about it could save you time.