質問

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

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

役に立ちましたか?

解決

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

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

Phillipが上に示したように、ビューモデル間にメッセージを送信できます。 ViewModelがメッセージを受信すると、「ShowDialog」と言う自分の内部プロパティをTrueに設定できます。

その後、このプロパティ変更操作に反応し、ダイアログを開くバインディングを行うことができます。

また、Joshのアイデア(および他のいくつかの既存のフレームワーク)から借用するMVVMパターンのシンプルなメッセージングフレームワークを構築しました。 ここ

他のヒント

親ビューとダイアログビューがあるとします。 MVVMでは、両方ともビューモデルを持っています。これらのビューモデルを分離し続けるのは良いことです。つまり、互いに参照を持っていません。それでも、彼らはお互いにコミュニケーションをとる必要があります。メッセンジャークラスは、2つのクラス間の情報のコミュニケーションを仲介するための出入りまたは調停者として機能します。から取得したコードを参照してください ジョシュのブログ.

alt text

ここにオブジェクトAがあります。メディエーターの登録法の実装への呼び出しです。メディエーターからメッセージを受け取ると、メンバーのwhatobjectbsaysにキャッシュします。

alt text

ここにオブジェクトBがあります。これは次のとおりです。メッセージを送信します。オブジェクトBはオブジェクトAについて何も知らないことに注意してください。オブジェクトベースの装備を聞くことは何もないかもしれません。これは良いデカップリングであり、これがメディエーターパターンが良い考えである理由です。これは、MVVM財団がビューモデル間で情報を渡すことを推奨する方法です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top