複数のViewでViewModelクラスのインスタンスを共有する方法
たとえばこんな感じだったとします。
Window
UserControl1
UserControl2
WindowのXAML内になんでも放り込むとごちゃごちゃするのでUserControlに分けたりするのですが、その場合ViewModelのインスタンスはどうなるんだと
ちなみにWindowとその子要素であるUserControlに同じクラスを指定するのは駄目で、内部的には別々のインスタンスを参照することになってしまうのですね。*1
で、どうやるかというと
UserControlのDataContextには何も指定しない
何も指定しなければ親要素であるWindowのDataContextと同じものを使うことになるので、ViewModelクラスのインスタンスを共有したことになるのですね。
なーんだ。簡単なことだ。。*2
何がいいかって、複数のViewクラスで同じデータを参照できるのでFormアプリケーションみたいに、Viewが違ったら別世界ってことがなくなります。わざわざModelのインスタンスを渡す必要がなくなるわけです。
Commandだって、バインディングしておけば複数のViewのボタンに同じ処理を定義することができる。
FormアプリケーションではViewを分けるのがあんなに面倒くさかったのに!
てなわけ。
なるほど、これは便利だ。