私は、MVVMパターンを実装しようとするSurfaceWPFプロジェクトに取り組んでいます。このプロジェクト内で、さまざまなビューモデルにバインドするいくつかのカスタムコントロールを構築しています。
たとえば、設定ビューモデルを持つ設定コントロールがあり、「全体的な」ビューモデルであるメインビューモデルがあります。
surfacewindows.xamlページでは、mvvm-lightのviewmodelロケーターを使用して、datacontextをメインのviewmodelに設定しています。また、surfacewindow.xamlに設定コントロールを追加し、コントロールでdatacontextを設定viewmodelに設定しました。
ここで、両方のビューモデルが相互作用する必要があります。現在のケースでは、設定コントロールの可視性を設定する必要があります。メインビューモデルにブール値(IsSettingsControlVisible)のプロパティがあり、コンバーターを使用してブール値を可視性オブジェクトに変換することにより、コントロールの可視性プロパティにバインドされます。
この問題は、設定コントロールの閉じるボタンをクリックして表示を非表示に設定する必要がある場合に発生します。コントロールのデータコンテキストを設定ビューモデルに設定したため、メインビューモデルにアクセスできません。
これまで考えてきたのは、設定ビューモデルをプロパティとしてmainviewmodelに追加し、設定コントロールからデータコンテキストを削除することです。settingscontrolでは、バインディングをSettingsProperty.Propertyとして使用します。setttingsコントロールからmainviewmodelにもアクセスできます。それは理にかなっていますか?この種の相互作用を行うためのより良い方法はありますか?
これらの相互作用を実現する方法についてのあなたのアイデアを聞くのが本当に好きです。