请参阅How can I tell my DataTemplate to bind to a property in the PARENT ViewModel?
我有类似的问题......但是这个解决方案对我不起作用。我有一个MainViewModel,它有一个可观察的另一个视图模型集合,例如View1 / ViewModel1。这个视图有一个树控件,我需要树的上下文菜单。我的主视图有一个菜单。这些主菜单和上下文菜单已连接。那么如何将上下文菜单命令绑定到主视图模型的属性?
答案 0 :(得分:13)
基本上,您需要使用RelativeSource
绑定。标准方法是找到特定类型控件的祖先(或父级):
{Binding DataContext.PropertyName, RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type YourViewsNamespace:YourParentView}}}
假设您的父视图的视图模型设置为其DataContext
,此绑定将访问它... DataContext
是视图的DataContext
,例如。设置为DataContext
的视图模型。因此,PropertyName
属性是该视图模型的公共属性。
关于您之前曾多次询问的部分问题,请参阅以下链接(或只是在线搜索):
答案 1 :(得分:0)
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"/>