グリッド内の複数のWPF usercontrols間で通信する(MVVMアプリ)
-
12-10-2019 - |
質問
こんにちは、UserControlsに個別の機能ユニットを持つことでアプリケーションを拡大し、これらのいくつかをメインページにコンテンツコントロールのグリッド内に入れたいと思います。グリッド内のコントロール間で通信できる必要があります。
私は、彼らがデータを交換するための最良の方法は何だろうと思っています。アプリケーションはMVVMデザインであり、各UserControlには独自のViewModelがあります。メインフォームのコンテンツコントロールの各コンテンツプロパティは、そのコンテンツコントロールに表示されるusercontrolを提供するメインフォームのビューモデルのプロパティにバインドされています。
たとえば、拡張ファイルブラウザが必要だとしましょう。そのため、usercontrolに組み込みます。次に、別のusercontrolにファイルビューアーがあります。メインフォームのグリッドで両方を同時に見せることができます。ブラウザを使用してファイルを選択するときは、選択したファイルをViewer UserControlが利用できるようにしたいと考えています。
このデザインを使用して、アプリケーションで必要な場所で機能の各塊を再利用できるようにしました。私のデザインでは、彼らがお互いに気付いていないので、私はそれらの間でどのようにデータを転送するのが最善かについては明確ではありません。何かアドバイス?ありがとう!
解決
メッセージバスを使用します。あなたが使用している場合 MVVM Light TakeT, 、たとえば、を使用します 組み込みのimessengerの実装. 。そうでない場合は、自分で転がすのはかなり簡単です。
メッセージバスがあると、あるViewModelでメッセージに登録して、別のViewModelからメッセージを公開できます。これは、ViewModel全体で(1つから1つまたは「ブロードキャスト」ファッションで)通信する簡単な方法です。