8

请参阅如何告诉我的 DataTemplate 绑定到 PARENT ViewModel 中的属性?

我有类似的问题......但这个解决方案对我不起作用。我有一个 MainViewModel,它有另一个视图模型的可观察集合,比如 View1/ViewModel1。这个视图有一个树控件,我需要树的上下文菜单。我的主视图有一个菜单。那些主菜单和上下文菜单是相连的。那么如何将上下文菜单命令绑定到主视图模型的属性呢?

4

2 回答 2

20

基本上,您需要使用RelativeSource绑定。标准方法是查找特定类型控件的祖先(或父级):

{Binding DataContext.PropertyName, RelativeSource={RelativeSource FindAncestor, 
    AncestorType={x:Type YourViewsNamespace:YourParentView}}}

假设您的父视图有一个视图模型设置为它DataContext,这个绑定将访问它......这DataContextDataContext视图的,例如。设置为的视图模型DataContext。因此,该PropertyName属性是该视图模型的公共属性。

关于你之前被问过很多次的部分问题,请看以下链接(或直接在网上搜索):

WPF 中的上下文菜单

将 ContextMenu 绑定到其逻辑父级

于 2013-09-10T11:51:25.183 回答
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"/>        
于 2014-10-02T18:30:39.560 回答