我正在尝试使用嵌套视图模型的MVVM模式创建应用程序。主视图模型是ShellView,它包含三个UserControl,每个UserControl都有自己的viewmodel。 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}">
但是调试器说“无法在'object'类型的数据上下文中解析属性'CustomerViewModel'。任何帮助都将不胜感激。
答案 0 :(得分:13)
您只需要使用
DataContext="{Binding CustomerViewModel}"
您已经在构造函数中设置了DataContext = _shellViewModel;
,因此将整个窗口的datacontext设置为ShellViewModel
,因此在定义绑定时,它会在datacontext中查找您的路径有定义。这就是上述绑定将在CustomerViewModel
实例上查找ShellViewModel
属性的原因。