WPFのMVVMとは何か

UIとUI以外を分離するアーキテクチャ


アプリケーション =  UI処理 + UI処理以外


UI処理以外をModelと呼ぶ。

アプリケーション = UI処理 + Model

UI処理の中をViewとViewModelに分離する。

アプリケーション = View + ViewModel + Model


アプリケーションのすべてのプログラム、データはView,ViewModel,Modelのどこかに所属する。


View,ViewModel,Modelの依存は一つのみ。方向は一方通行

View -> ViewMdel -> Model
(ViewはViewModelに依存、ViewModelはModelに依存)



・View

    Viewは画面表示と入力を担当する。データとプログラムは持たない。

    ViewはViewModelを知っている。
    =ViewはViewModelのインスタンスの参照を持っている
    =ViewはViewModelにアクセスできる。

    Viewの表示するデータはViewModelが持つ。
    Viewの入力処理(Command)はViewModelが持つ。



・ViewModel

ViewModelはUIの中の表示と入力以外全部を担当する。

ViewModelはViewを知らない。
=ViewModelはViewのインスタンスの参照を持たない。
=ViewModelはViewにアクセスできない。

Viewの表示するデータはViewModelが持つ。
Viewの入力の対応処理プログラム(Command)はViewModelが持つ。
UIとModelの橋渡しをするのはViewModelの仕事。


ViewModel = データ + プログラム


ViewModelの仕事
    Viewとのやり取り
    UIの仕事
    Modelとの橋渡し

だけ


ViewModelがViewに公開するもの

    プロパティ
    Command
    NotifyChangedイベント


ViewModelはModelを知っている。
=ViewModelはModelのインスタンスの参照を持っている。
=ViewModelはModelにアクセスできる。

ViewとViewModelをつなぐのはバインド機構

バインド機構はアプリーケーションの外側


・Model

Model = データ + プログラム

ModelはViewModelを知らない
= ModelはViewModelのインスタンスの参照を持たない
= ModelからViewModelにアクセスはできない。


Modelが公開するもの

    メンバ変数
    プロパティ
    メソッド

 デリゲート
    イベント

ViewModelとModel間については規定はない。
ModelはUIが切り替わっても動作できるように作ってもよいし、UIを固定して作ってもよい。


重要なのはUIとUI以外を分離すること。