ネストされたビューモデルで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'を解決できません。助けていただければ幸いです。
あなたは単に使用する必要があります
DataContext="{Binding CustomerViewModel}"
コンストラクターですでにDataContext = _shellViewModel;
を設定しているため、ウィンドウ全体のデータコンテキストがShellViewModel
に設定されているため、バインディングを定義すると、定義したデータコンテキスト内のパスが検索されます。 。そのため、上記のバインディングはCustomerViewModel
インスタンスのShellViewModel
プロパティを検索します。