Model View ViewModel
1つのモデルと1つのViewを仲介するためにViewModelは存在する。しかし実装上このViewModelを他のViewModelから利用してしまう場合がある。例えばVM1が持っている値が他のViewModel (VM2) でも利用できる形に整形されていたとする。VM2は変換を実装せずともVM1を参照・監視するだけで適切な値を得ることができてしまう。もしVM1がVM2の値を同様に参照すると容易に循環参照が発生する。VM1はVM2の値変更を監視しているため、VM2の変更でVM1が変更されそれによりVM2が変更され...とループが走り、システムの状態が予測不可能になる(デバッグが著しく困難になる)。
Microsoft MVPのJosh Smithのリポートより
2005年に、マイクロソフトのWPFおよびSilverlightアーキテクトであったJohn Gossmanが自身のブログでModel-View-ViewModel (MVVM) パターンを発表しました。MVVMとFowlerのプレゼンテーションモデルは、両方ともビューの状態と動作を含んだ形でビューを抽象化しています。Gossmanはユーザインタフェースの作成を簡素化するために、WPFの活用コア機能への標準化された方法としてMVVMを導入し、一方、FowlerはビューのUIプラットフォームに依存しない抽象化を作成するための手段としてプレゼンテーションモデルを導入しました。その意味で、一般的なPMパターンをWPFとSilverlightのプラットフォームにより特化したものになるようにMVVMを検討しています。
MVVMパターンは、2006年11月21日にリリースされた.NET Framework 3.0に実装されたWPFとSilverlightの両方をサポートするために考案された。しかし、MVVMパターンは今日ではより広く適用され、MVCやMVPパターンなどMVVMパターンよりも前に発生した他のドメインにも波及している。
WPFに取り組んでいる何人かのマイクロソフトアーキテクト (クリエーターのJohn Gossman、Microsoft MVPのJosh Simith、MicrosoftプログラムマネージャーのKarl Shifflett) はMVVMについてオンライン上で幅広く情報発信している。
さらに今日では、パターンはmodel-view-binder (MVB) としても記載されている。