WPF はなんかおかしい、ビヘイビアーといいデータテンプレートセレクターといい、View と ViewModel を両方知らないと達成できないものがそこここにちりばめられている。
特にデータテンプレートセレクターはコントローラ的な性格をもつものだと思っっていた。
SilverlightではテンプレートセレクターがないのでAppのPartialとしてViewModel を初期化してView を切り替えるものを作成し、ビジネスにからデータを取得する機能も便利なので付け加えた。
一方で更新系はViewModel からビジネスを呼ぶほうが断然便利なのでそのルートは確保したままにしている。
これは層を追加することによってアプリケーションファザード的な薄皮をプレゼンターに作る無駄なコーディングが増えることを嫌ったせいだ。
WPFでもその考えを踏襲して作成している。
去年のMSDNマガジンに「WPF 向けのモデル - ビュー - プレゼンター - ビューモデル設計パターン」という記事があった。
http://msdn.microsoft.com/ja-jp/magazine/hh580734.aspx
これは、私のやり方と合致するものだと思った。
図にするとこんな感じだが、MSDNマガジンとは、2点異なっている。
1)更新系はViewModel からビジネスを呼ぶ。
2)View から ViewModel (ICommand) を経由してPresenterを呼ぶ。