请参阅如何告诉我的 DataTemplate 绑定到 PARENT ViewModel 中的属性?
我有类似的问题......但这个解决方案对我不起作用。我有一个 MainViewModel,它有另一个视图模型的可观察集合,比如 View1/ViewModel1。这个视图有一个树控件,我需要树的上下文菜单。我的主视图有一个菜单。那些主菜单和上下文菜单是相连的。那么如何将上下文菜单命令绑定到主视图模型的属性呢?
请参阅如何告诉我的 DataTemplate 绑定到 PARENT ViewModel 中的属性?
我有类似的问题......但这个解决方案对我不起作用。我有一个 MainViewModel,它有另一个视图模型的可观察集合,比如 View1/ViewModel1。这个视图有一个树控件,我需要树的上下文菜单。我的主视图有一个菜单。那些主菜单和上下文菜单是相连的。那么如何将上下文菜单命令绑定到主视图模型的属性呢?
基本上,您需要使用RelativeSource
绑定。标准方法是查找特定类型控件的祖先(或父级):
{Binding DataContext.PropertyName, RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type YourViewsNamespace:YourParentView}}}
假设您的父视图有一个视图模型设置为它DataContext
,这个绑定将访问它......这DataContext
是DataContext
视图的,例如。设置为的视图模型DataContext
。因此,该PropertyName
属性是该视图模型的公共属性。
关于你之前被问过很多次的部分问题,请看以下链接(或直接在网上搜索):
1. ParentViewModel has NavigateRecordCommand
2. Parentview has the DataContext Set to my ParentViewModel.
<UserControl x:Class="SampleProject.UI.ParentView"
<Grid>
....
<!--User control is here-->
<local:NavigationControl Grid.Row="1" />
....
</Grid>
3. Child Control as below. Not bounded to its ViewModel. Bounded to Parent Views DataContext i.e. ParentViewModel.
<UserControl x:Class="SampleProject.UI.NavigationControl"
...
...
xmlns:Local="clr-namespace:SampleProject.UI">
<Button Command="{Binding DataContext.NavigateRecordCommand, RelativeSource={RelativeSource AncestorType=Local:ParentView}}"
CommandParameter="MoveFirst"/>