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

WPF MVVM - Bind to a property from an ancestor view model

我有一堆 views/view 个类似于以下的模型:

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 是由工厂填充的。

FindAncestor 正在寻找一个视图而不是绑定的 ViewModel。由于这个事实,您需要将视图的类型设置为 AncestorType。现在您可以通过将 DataContext 添加到 Path 进行绑定来访问此 View 的 ViewModel。

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