9

私は WPF アプリケーションを開発していますが、あるビュー モデルを別のビュー モデルと通信するのに問題があります。

私は持っている:

  1. MainViewModel
  2. ChildViewModel1
  3. ChildViewModel2

MainViewModel のプロパティが変更されるたびに、ChildViewModel1 と ChildViewModel2 に通知する必要があります。

誰でも回避策を提案できますか?

編集:メッセージ バスを実装しているMVVM Light ( http://simplemvvmtoolkit.codeplex.com/SourceControl/changeset/view/23821#313594. ) を記述したソリューションで考えています。それは正しいアプローチですか?

4

3 に答える 3

12

ほとんどの場合、EventAggregator などの「イベント」/「通知」を共有するために集中型の場所を使用することはお勧めしません。これは、ViewModel 間の明確な関係に関連する後で問題につながります。このような通知は、設計段階でもリスナーとパブリッシャーの関係が不明な非常に特殊なケースで意味があります。ViewModel間の関係を示す簡単な図を描き、標準の.NETイベントを使用する方法を見つけることをお勧めします.そのようなイベント通知を簡単に作成できます。

于 2013-04-22T14:15:37.293 に答える
6

ViewModel がそれらの間で通信する一般的な方法は、Mediator デザイン パターンの実装です。

MVVMLight http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/27aaefff-e463-451c-87d9-37367a343e0eでの方法は次のとおりです。

プリズムの場合: http://blogs.u2u.be/diederik/post/2011/01/15/Using-the-Prism-40-Event-Aggregator.aspx

カリバーンでは: http://www.mindscapehq.com/blog/index.php/2012/02/01/caliburn-micro-part-4-the-event-aggregator/

于 2013-04-22T14:24:46.650 に答える
3

各ビュー モデルによって実装される IService を使用します。次に、ビュー モデルで、INotifypropertychanged を実装するビュー モデルのプロパティにサービス プロパティを渡すことができます。たとえば、ビュー モデルによって実装される INavigationService というサービスがあり、ビュー モデルでバインドする CanNavigate、currentView などのプロパティがあります。これらのプロパティを変更すると、ナビゲーションが発生したり、他のビュー モデルがバインドされているプロパティが変更されたりする可能性があります。

于 2013-04-22T14:11:33.570 に答える