WPF usercontrol命令绑定到窗口视图模型

时间:2012-04-04 13:05:26

标签: wpf binding mvvm

我有一个包含UserControl1和UserControl2的窗口。这些用户控件具有自己的视图模型。此外,这些用户控件使用UserControl3来显示数据。因此,当UserControl1使用UserControl3时,UserControl3具有与UserControl1相同的视图模型。

我在UserControl3中有一个绑定,我想调用UserControl1的viewmodel上的命令。

但我找不到办法让它发挥作用。欢迎任何帮助。非常感谢你。

这是我的绑定不起作用:

<UserControl x:Class="MyNamespace.UserControl3"             
         xmlns:local="clr-namespace:MyNamespace">    
<UserControl.Resources>        
    <DataTemplate DataType="{x:Type g:GraphNode}"> 
        <StackPanel>               
            <StackPanel.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="My Command" Command="{Binding Path=DataContext.MyCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:UserControl3}}}"/>
                </ContextMenu>
            </StackPanel.ContextMenu>               
            <Grid>
                <ContentControl Content="{Binding Data}"/>                      
            </Grid> 
        </StackPanel>             
    </DataTemplate>       
</UserControl.Resources>

1 个答案:

答案 0 :(得分:1)

这适用于我的应用:

<DataTemplate DataType="{x:Type g:GraphNode}">
        <StackPanel Tag="{Binding}">
            <StackPanel.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="My Command" Command="{Binding Path=PlacementTarget.Tag.MyCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}" />
                </ContextMenu>
            </StackPanel.ContextMenu>
        </StackPanel>
    </DataTemplate>

关键是ContextMenus位于不同的窗口,因此您无法像平常那样访问datacontexts。
您必须对此进行调整,以便将包含您所寻找的Command的对象设置为StackPanel的标记(即PlacementTarget的{​​{1}}。< / p>