我有一个主窗口和一个视图模型。这个主窗口使用一个用户控件,它也有自己的视图模型。
我想要实现的是在主窗口的 xaml 中设置其视图模型的自定义属性之一和用户控件的视图模型的自定义属性之一之间的绑定。
一个人会怎么做呢?
您可以改用 ViewModel 作为模型的投影吗?
也就是说,您是否可以拥有一个类来保存两个 VM 都需要公开的状态(或操作)并让两个 VM 都引用这个类?
如果由于某种原因您必须将视图与它们自己的 DataContext 之外的东西耦合,我相信您只能通过在绑定中使用 RelativeSource FindAncestor 来向上可视化树。我不认为你可以向下遍历(例如窗口-> 控制)。
如果你真的想将它们绑定在一起,你可以让你的 ViewModel 的属性Dependency Properties和你的 ViewModel 从DependencyObject派生- 那么你可以这样做..
var binding = new Binding("Something");
binding.Source = myViewModel1;
binding.Mode = BindingMode.TwoWay;
BindingOperations.SetBinding(viewModel2,ViewModelType.SomethingProperty,binding);
如果这是一个很好的设计,让您的视图模型从 DependencyObject 派生是另一个问题。
您还可以尝试查看这个允许绑定到 POCO 和从 POCO 绑定的库。
我最终没有为我的用户控件使用模型视图,虽然没有那么整洁,但至少它可以工作并且在数据上下文方面不那么复杂。谢谢大家。