MVVM was designed to remove virtually all GUI code ("code-behind") from the view layer, by using data binding functions in WPF (Windows Presentation Foundation) to better facilitate the separation of view layer development from the rest of the pattern.18 Instead of requiring user experience (UX) developers to write GUI code, they can use the framework markup language (e.g. XAML) and create data bindings to the view model, which is written and maintained by application developers. The separation of roles allows interactive designers to focus on UX needs rather than programming of business logic. The layers of an application can thus be developed in multiple work streams for higher productivity. Even when a single developer works on the entire codebase, a proper separation of the view from the model is more productive, as the user interface typically changes frequently and late in the development cycle based on end-user feedback.
The MVVM pattern attempts to gain both advantages of separation of functional development provided by MVC, while leveraging the advantages of data bindings and the framework by binding data as close to the pure application model as possible.192021 It uses the binder, view model, and any business layers' data-checking features to validate incoming data. The result is that the model and framework drive as much of the operations as possible, eliminating or minimizing application logic which directly manipulates the view (e.g., code-behind).
John Gossman has criticized the MVVM pattern and its application in specific uses, stating that MVVM can be "overkill" when creating simple user interfaces. For larger applications, he believes that generalizing the viewmodel upfront can be difficult, and that large-scale data binding can lead to lower performance.22
Smith, Josh; et al. "Thought: MVVM eliminates 99% of the need for ValueConverters". Google Groups. https://groups.google.com/forum/#!topic/wpf-disciples/P-JwzRB_GE8 ↩
Martin Fowler (19 July 2004). "The Presentation Model Design Pattern". Martin Fowler.com. http://martinfowler.com/eaaDev/PresentationModel.html ↩
Smith, Josh (February 2009). "WPF Apps with the Model–View–ViewModel Design Pattern". MSDN Magazine. http://msdn.microsoft.com/en-us/magazine/dd419663.aspx ↩
Gossman, John (8 October 2005). "Tales from the Smart Client: Introduction to Model/View/ViewModel pattern for building WPF apps". https://docs.microsoft.com/en-us/archive/blogs/johngossman/introduction-to-modelviewviewmodel-pattern-for-building-wpf-apps ↩
Massey, Simon (9 April 2011). "Presentation Patterns in ZK". Retrieved 24 March 2012. https://www.slideshare.net/simbo1905/design-patterns-in-zk-java-mvvm-as-modelviewbinder ↩
Steve Sanderson. "KnockoutJS". http://knockoutjs.com/documentation/observables.html ↩
"The MVVM Pattern". msdn.microsoft.com. 4 October 2012. Retrieved 29 August 2016. https://msdn.microsoft.com/en-us/library/hh848246.aspx ↩
Pete Weissbrod. "Model–View–ViewModel Pattern for WPF: Yet another approach". Archived from the original on 1 February 2008. https://web.archive.org/web/20080201101909/http://www.acceptedeclectic.com/2008/01/model-view-viewmodel-pattern-for-wpf.html ↩
Microsoft (3 April 2024). "Tutorial: Create a web API with ASP.NET Core". https://learn.microsoft.com/en-us/aspnet/core/tutorials/first-web-api ↩
Wildermuth, Shawn (11 May 2010). "Windows Presentation Foundation Data Binding: Part 1". Microsoft. Retrieved 24 March 2012. http://msdn.microsoft.com/en-us/library/aa480224.aspx ↩
"ZK MVVM". Potix. Retrieved 24 March 2012. http://books.zkoss.org/wiki/Small_Talks/2012/February/New_Features_of_ZK_6#ZK_MVVM ↩
Karl Shifflett. "Learning WPF M-V-VM". Archived from the original on 13 April 2009. Retrieved 5 June 2009. https://web.archive.org/web/20090413205731/http://karlshifflett.wordpress.com/2008/11/08/learning-wpf-m-v-vm/ ↩
Gossman, John (4 March 2006). "Tales from the Smart Client: Advantages and disadvantages of M-V-VM". AI Skills Challenge. https://docs.microsoft.com/en-gb/archive/blogs/johngossman/advantages-and-disadvantages-of-m-v-vm ↩