我正在尝试使用带有嵌套 View 模型的 MVVM 模式创建应用程序。主视图模型是 ShellView,它包含三个用户控件,每个控件都有自己的 View 模型。 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
,因此当您定义绑定(bind)时,它会在您定义的数据上下文中查找路径。这就是为什么上面的绑定(bind)会寻找 CustomerViewModel
您的 ShellViewModel
上的属性(property)实例。
关于wpf - 将 UserControl 的 datacontext 设置为在父 View 模型中定义的 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13740593/