【发布时间】:2013-02-14 11:12:32
【问题描述】:
网络上的多个消息来源告诉我们,在MVVM 中,视图和视图模型之间的通信/同步应该通过依赖属性进行。如果我理解正确的话,应该使用双向绑定将视图的依赖属性绑定到视图模型的属性。现在,以前也有人问过类似的问题,但没有足够的答案。
在我开始分析这个相当复杂的问题之前,这是我的问题:
如何将 自定义 视图的 DependencyProperty 与视图模型的属性同步?
在理想世界中,您只需将其绑定为:
<UserControl x:Class="MyModule.MyView" MyProperty="{Binding MyProperty}">
这不起作用,因为MyProperty 不是UserControl 的成员。嗬!我尝试了不同的方法,但都没有成功。
一种解决方案是定义一个基类UserControlEx,它具有必要的依赖属性,以使上述方法正常工作。然而,这很快变得非常混乱。不够好!
【问题讨论】:
-
包含MyProperty的对象应该设置为控件的DataContext。
-
当你使用你的UserControl时,你不会写
<myModule:MyView MyProperty="{Binding MyProperty}">,myModule是一个合适的xmlns声明吗?当然,绑定的来源是以某种方式设置的,或者通过控件的DataContext,或者通过显式设置绑定的Source或RelativeSource。 -
@Clemens,你的意思是绑定应该发生在视图被实例化的地方?在这种情况下,你如何告诉它使用自己的
DataContext而不是父级的DataContext(实例化的地方)? -
@l33t 只是为了确保我们谈论的是同一件事。 bound 属性(第一个
MyProperty)是UserControl 类MyView 中的依赖属性。绑定源属性(第二个MyProperty,在Binding 声明中)是ViewModel 类中的属性,通常是实现INotifyPropertyChanged的类中的CLR 属性。 -
@Clemens,是的。这个想法是通过它们的绑定属性在视图和视图模型之间进行通信。许多网站/论坛都提到了这种技术(但从未展示过:P)。
标签: c# wpf mvvm dependency-properties