wpf - 将 UserControl 的 datacontext 设置为在父 View 模型中定义的 ViewModel

标签 wpf xaml data-binding datacontext

我正在尝试使用带有嵌套 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/

相关文章:

javafx - 为什么我的 Spinner 在第一次初始化时不更新它的绑定(bind)属性?

wpf - 如何在 WPF 中将数据绑定(bind)到 IGrouping?

silverlight - 将 ListBox 绑定(bind)到屏幕集合(小部件)

c# - 为什么 WPF 中任何元素的 TabIndex 属性都是 2147483647?

xaml - 可以包装Listview内集合的内容的布局

c# - 在 WPF 中应用条件样式

c# - 如何检索点击的 ListView 行数据和隐藏 id 列

xaml - xaml 中的逻辑 NOT

c# - WPF 和 Windows 10 崩溃

c# - 如何在WPF CheckBox ListBox中获取选中的项目