12

我正在尝试使用带有嵌套视图模型的 MVVM 模式创建应用程序。主视图模型是 ShellView,它包含三个用户控件,每个控件都有自己的视图模型。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'。任何帮助将不胜感激。

4

1 回答 1

13

你只需要使用

DataContext="{Binding CustomerViewModel}"

您已经DataContext = _shellViewModel;在构造函数中进行了设置,因此将整个窗口的数据上下文设置为ShellViewModel,因此当您定义绑定时,它会在您定义的数据上下文中查找路径。这就是为什么上面的绑定会在你的实例上寻找CustomerViewModel属性。ShellViewModel

于 2012-12-06T09:37:22.510 回答