web-dev-qa-db-ja.com

UserControlのデータコンテキストを親ビューモデルで定義されたViewModelに設定する

ネストされたビューモデルでMVVMパターンを使用してアプリケーションを作成しようとしています。マスタービューモデルはShellViewであり、それぞれが独自のビューモデルを持つ3つのUserControlを含みます。 ShellView ViewModelは、次のようにコードビハインドで作成されます。

public ShellView()
{
    InitializeComponent();
    _shellViewModel = new ShellViewModel();
    DataContext = _shellViewModel;
}

これで、ShellViewModelに他のViewModelがプロパティとして含まれます。

    public CustomerViewModel CustomerViewModel { get; set; }

    public ContactsViewModel ContactsViewModel { get; set; }

UserControlsのXAMLからこれらのプロパティにアクセスするにはどうすればよいですか?私は次のようなことができるようになりたいです:

DataContext="<<ParentWindowViewModel>.CustomerViewModel>

どうすればこれを達成できますか?私はすでに試しました:

DataContext="{Binding DataContext.CustomerViewModel, RelativeSource={RelativeSource FindAncestor, AncestorType=Window, AncestorLevel=1}, Path=DataContext.CustomerViewModel}">

しかし、デバッガーは「タイプ 'オブジェクト'のデータコンテキストでプロパティ 'CustomerViewModel'を解決できません。助けていただければ幸いです。

12
ZymLink

あなたは単に使用する必要があります

DataContext="{Binding CustomerViewModel}"

コンストラクターですでにDataContext = _shellViewModel;を設定しているため、ウィンドウ全体のデータコンテキストがShellViewModelに設定されているため、バインディングを定義すると、定義したデータコンテキスト内のパスが検索されます。 。そのため、上記のバインディングはCustomerViewModelインスタンスのShellViewModelプロパティを検索します。

13
Adi Lester