MVVM Foundation Messengerを使用してダイアログを表示します
-
22-09-2019 - |
質問
私はWPFアプリを構築し、MVVMのベストプラクティスに準拠しようとしています。私は使用しています MVVM Foundation フレームワークと気づいた メッセンジャー 私が読んだクラスは使用する必要があります WPFでのダイアログの処理. 。これは素晴らしいように聞こえますが、私はこの目的のためにメッセンジャーを使用する方法を完全に理解していません。文字通り、私がやりたいのは、ダイアログについてモーダルを開くことだけです。メッセージをやり取りする必要はありません。
メッセンジャークラスの意図は、ダイアログが親からのメッセージを必要とする場合、またはその親にメッセージを返す場合に使用されましたか?アバートダイアログには過剰になりますか?イベントハンドラーにコードを追加してダイアログを表示するだけでよいでしょうか?
解決
メッセージングパターンの背後にあるアイデアは、特にダイアログを表示することとは何の関係もありません。アイデアは、ビューモデル間で通信するための分離された方法を提供することです。
このインフラストラクチャを活用して問題を解決できますが、ダイアログの表示を自分で実装する必要があります。
Phillipが上に示したように、ビューモデル間にメッセージを送信できます。 ViewModelがメッセージを受信すると、「ShowDialog」と言う自分の内部プロパティをTrueに設定できます。
その後、このプロパティ変更操作に反応し、ダイアログを開くバインディングを行うことができます。
また、Joshのアイデア(および他のいくつかの既存のフレームワーク)から借用するMVVMパターンのシンプルなメッセージングフレームワークを構築しました。 ここ
他のヒント
親ビューとダイアログビューがあるとします。 MVVMでは、両方ともビューモデルを持っています。これらのビューモデルを分離し続けるのは良いことです。つまり、互いに参照を持っていません。それでも、彼らはお互いにコミュニケーションをとる必要があります。メッセンジャークラスは、2つのクラス間の情報のコミュニケーションを仲介するための出入りまたは調停者として機能します。から取得したコードを参照してください ジョシュのブログ.
ここにオブジェクトAがあります。メディエーターの登録法の実装への呼び出しです。メディエーターからメッセージを受け取ると、メンバーのwhatobjectbsaysにキャッシュします。
ここにオブジェクトBがあります。これは次のとおりです。メッセージを送信します。オブジェクトBはオブジェクトAについて何も知らないことに注意してください。オブジェクトベースの装備を聞くことは何もないかもしれません。これは良いデカップリングであり、これがメディエーターパターンが良い考えである理由です。これは、MVVM財団がビューモデル間で情報を渡すことを推奨する方法です。