WPF MVVM - 从祖先视图模型绑定到属性

时间:2017-10-08 13:15:36

标签: c# wpf mvvm data-binding relativesource

我有一组类似于以下内容的视图/视图模型:

CustomDialogView
  CustomView
    CustomListView
      CustomControl
        -SomeCustomProperty

这些视图中的每一个都绑定到适当的视图模型。

我正在尝试将SomeCustomProperty绑定到CustomDialogView的视图模型上的属性。

最好的方法是什么?我尝试了一些东西,其中最有希望的似乎是通过RelativeSource FindAncestor设置这个属性的绑定,如:

<CustomControl
    SomeCustomProperty="{
        Binding RelativeSource={RelativeSource FindAncestor,
        AncestorType={x:Type sourcePath:CustomDialogViewModel}},
        Path=SomeCustomProperty,
        Mode=OneWay/>
</CustomControl>

但我完全没有约束力。

我不确定它是否有任何影响,但CustomListView由工厂填充。

1 个答案:

答案 0 :(得分:3)

FindAncestor发现View不是绑定的ViewModel。因此,您需要将视图类型设置为AncestorType。现在,您可以通过将DataContext添加到要绑定的Path来访问此视图的ViewModel。

<CustomControl
    SomeCustomProperty="{
        Binding RelativeSource={RelativeSource FindAncestor,
        AncestorType={x:Type sourcePath:CustomDialogView}},
        Path=DataContext.SomeCustomProperty,
        Mode=OneWay/>
</CustomControl>