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>
我有一堆 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>