しらとりのブログ

社会人ひよこプログラマのtil

MVVMにおけるViewModelの役割を考える

wikipediaより。

Modelの役割は、後述するViewとViewModelの役割以外の部分と考えるのが妥当である。

ViewはXAMLですし、ViewModelの役割がわかればよさそうなのでここから考えます。


View⇔ViewModeでの役割

  • コントロールに対応するプロパティを作成する。
  • コマンドを公開する。

ViewModel自身の役割

  • Modelのインスタンスを取得する。newするか、シングルトンから取得するか、インジェクションしてもらうか。
  • RelayCommandなどでコマンドとなるメソッドを紐づける。
  • コントロールに対応するプロパティはModelのプロパティを仲介をする。setterにはINotifyPropertyChangedの実装を入れる。

ViewModel⇔Modelでの役割

  • ModelのPropertyChanedイベントを購読して自身のプロパティに反映。
  • コマンド内でのModelのメソッド呼び出し。


MVVMというより、WPFの機能を活用してPDSを行うと大体こうなるとおもいます。この中でもModelの変更通知イベントを購読する部分は意図して崩す時が多いです。そのときはModelのプロパティに直接バインドしてしまいます。いまだに弱いイベントパターンがわかってません。