4

私はWPFアプリを構築しており、MVVMのベストプラクティスに準拠しようとしています。MVVM Foundationフレームワークを使用していますが、読んだMessengerクラスをWPFでのダイアログの処理に使用する必要があることに気付きました。これは素晴らしいことのように聞こえますが、私はこの目的でメッセンジャーを使用する方法を完全に理解していません。文字通り、私がやりたいのは、モーダルのAboutダイアログを開くことだけです。メッセージをやり取りする必要はありません。

メッセンジャークラスの意図は、ダイアログがその親からのメッセージを必要とする場合、またはその親にメッセージを返す場合に使用されましたか?Aboutダイアログではやり過ぎですか?ダイアログを表示するためにイベントハンドラーにコードを追加する方がよいでしょうか?

4

2 に答える 2

5

メッセージングパターンの背後にある考え方は、ダイアログの表示とは特に関係がありません。アイデアは、ViewModel間で通信するための分離された方法を提供することです。

このインフラストラクチャを活用して問題を解決できますが、ダイアログの表示を自分で実装する必要があります。

フィリップが上に示したように、ViewModel間でメッセージを送信できます。ViewModelがメッセージを受信すると、「ShowDialog」などの独自の内部プロパティをtrueに設定できます。

次に、このプロパティ変更操作に反応してダイアログを開くバインディングを作成できます。

また、Joshのアイデア(および他のいくつかの既存のフレームワーク)から借用したMVVMパターン用の単純なメッセージングフレームワークを構築しました。ここでそれについて読むことができます

于 2009-11-24T21:56:43.040 に答える
3

親ビューとダイアログビューがあるとします。MVVMでは、両方にビューモデルがあります。これらのビューモデルを分離しておくことをお勧めします。つまり、相互に参照することはありません。それでも、彼らは互いに通信する必要があります。メッセンジャークラスは、2つのクラス間の情報通信を仲介する仲介者または仲介者として機能します。Joshのブログから取得したコードを参照してください。

代替テキスト

これがオブジェクトAです。メディエーターのRegisterメソッドが実装する呼び出しです。メディエーターからメッセージObjectBSaidSomethingを受信すると、メンバーWhatObjectBSaysにキャッシュします。

代替テキスト

これがオブジェクトBで、これは次のことを実装しています。ObjectBSaidSomethingというメッセージを送信します。オブジェクトBはオブジェクトAについて何も知らないことに注意してください。ObjectBSaidSomethingをリッスンしているオブジェクトや100個のオブジェクトがObjectBSaidSomethingをリッスンしている可能性はありますが、オブジェクトBは認識しておらず、気にしません。これは良いデカップリングであり、これがメディエーターパターンが良いアイデアである理由です。そしてこれは、MVVMファウンデーションがビューモデル間で情報を渡すことを推奨している方法です。

于 2009-11-24T21:19:03.883 に答える