将UserControl的datacontext设置为父视图模型中定义的ViewModel

时间:2012-12-06 09:31:55

标签: wpf xaml data-binding datacontext

我正在尝试使用嵌套视图模型的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'。任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:13)

您只需要使用

DataContext="{Binding CustomerViewModel}"

您已经在构造函数中设置了DataContext = _shellViewModel;,因此将整个窗口的datacontext设置为ShellViewModel,因此在定义绑定时,它会在datacontext中查找您的路径有定义。这就是上述绑定将在CustomerViewModel实例上查找ShellViewModel属性的原因。