質問: MainWindowをFrameで二つに分割し、それぞれ別のXAML(Page1.xamlとPage2.xaml)を配置しようとしています。 Page1にはButtonを配置し、Page2にはTextBlockを配置します。 Buttonが押されたらTextBlockに文字を表示したいです。 自分のイメージでは、 Page1ViewModelとPage2ViewModelが共通のModelクラスのインスタンスを見ており、 Buttonが押されたらPage1ViewModelがModelを更新?して、 Page2ViewModelは更新されているかを常にチェックして、チェックされていればViewに反映するのかなと思っています。 【聞きたいこと】 1:MVVMの考え的に、上の理解で合っておりますか。 また、上記のButtonとTextBlockの例はものすごくシンプルですが、もっと複雑になったとしても基本的にこの考えで良いのでしょうか。 (良い例が浮かびませんが、たとえばPage2がさらにフレームで別れていて、中にまたXAMLが複数あったり...。) 2:1の考えが合っていたとしても概念的な理解でしかなく、具体的にどういう技術(クラスやプロパティ)を使えばいいのか、 何というワードで検索すれば良いのか分からないためご教示頂けると幸いです。
回答: 常にチェックと言うか、ViewModel はプロパティが変更された時にイベントを発行します。 そのイベントを購読すれば変更が通知されます。 この例の場合は、Button を押すことによってテキストを保持する ViewModel のプロパティが変更され、ViewModel は PropertyChanged イベントを発行し、View はそのイベントを受け取ってどのプロパティがどのように変更されたのかを知り、バインドされた適切な要素を更新します。 同じ ViewModel に二つの View をバインドすればいいのではないかと思いますが、そうでない場合は 二つの ViewModel から同じモデルを参照することになります。 この場合、Model がプロパティ変更イベントを発行できるのであれば、Model をプロパティとして公開し、View を直接バインドすることもできます。 そうでなければ、ViewModel のプロパティを通じて Model のプロパティにアクセスできるようにし、View は ViewModel のプロパティにバインドします。 INotifyPropertyChanged を調べてください。