質問: ### 分からないこと WPFアプリケーションとMVVMを学習しています。 あるユーザーコントロールAのボタンが押されたときに、別のユーザコントロールBの表示をAの情報をもとに変更する方法を考えています。 現状はAのViewModelでイベントアグリゲーターを使ってイベントを発行し、BのViewModelでそれを購読してデータを受け取り、画面を変更しています。 ですが、このようなViewModel間の通信はMVVM的に良いものなのでしょうか? やろうと思えばどこからでもイベントの発行と購読ができてしまいますが、イベントアグリゲーターはどこからどこへ(View?ViewModel?Model?)向かうイベントに対して使用するのが適切でしょうか?
回答: ViewModelでは、Modelの参照は持っても他のViewModelの参照は持ちません。 ViewModel同士の連携はModelを介して行います。 > > MVVMでイベントアグリゲーターを使用してイベントを発行/購読するのは誰? > > > MVVMパターンでは実装は定義しませんのでその答えはありません。 他のVMの参照を持たなければVMに書いてもダメってことはありません。 ただし、実際のMVVMの実装でイベント処理を書くことは殆どありません。 しいて言えばMVVMインフラの仕事です。 MVVMインフラは、Prism、Livet、MVVM Light Toolkit 等が代表的です。 MVVMを理解するには数をこなすのが最も近道ですから、サンプルをとにかくたくさん読んでみてください。