0

私は、イベントアグリゲーターを使用してグローバルタイプのメッセージを送信し、シェルによって取得される WPF Prism アプリケーションの開発に携わっています。たとえば、ビューモデルはトースト メッセージを表示する必要があるかもしれませんが、それがどのように表示されるかはあまり気にしません。この場合、シェルはこれらのイベントを処理し、アプリケーション全体でそれらに作用するようにセットアップされます。

私が持っている質問は、特定のビューでトースト メッセージを別の方法で表示したい場合、どうすればよいかということです。グローバルなアプローチは非常にシンプルなので気に入っていますが、特殊なケースに合わせてカスタマイズするにはどうすればよいですか?

4

2 に答える 2

1

イベントはアプリケーション全体にブロードキャストされるため、この目的で Eventaggregator を使用するのは適切ではないと思います。

シナリオを処理する 1 つの可能な方法は、ビューモデルがコンストラクターに注入された IMessenger インターフェイスを取得できることです。IMessenger (デフォルトで注入される) のアプリケーション実装があり、必要に応じて IMessenger の実装をカスタマイズできます。ビューモデルはインターフェイス関数(DisplayMessage()など)を呼び出すだけですが、注入されたメッセンジャーに応じて動作が異なります。

于 2012-06-21T11:19:39.323 に答える
1

これは、アプリケーションのセットアップ方法と、使用している標準/パターンに大きく依存すると思います。MVVM には 2 つのアプローチがあります。

View-First
View-Model がビューに挿入されている場合は、メッセージをビューに送信し、View にそれをどう処理するかを決定させます。それら自体を表示したい場合は、それを行うことができます。それらをシェルに送信したい場合は、イベント アグリゲーターまたは Toast サービス インターフェイスを挿入することで送信できます。これにより、ビューがビジュアルを制御し続けます。

View-Model-First
View が View-Model に挿入される場合、View Model は別の View を要求する必要があり、それは独自の View Model にバインドされる必要があります。別のビュー モデルにメッセージを送信する場合は、イベント アグリゲーターを使用するか、Toast ビュー モデル/サービス インターフェイスを挿入します。これにより、View-Model がビュー間のナビゲーションを制御できるようになります。

ビューがモデルの視覚化を制御できるようにするため、私は View-First アプローチを好みます。しかし、他の MVVM 開発者がこれにどのように取り組んでいるかに非常に興味があります。これは、MVVM View-First アプローチでダイアログを表示する方法の問題と非常に密接に一致しているようです。

于 2012-06-22T14:50:37.550 に答える