1

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

我在 UserControl3 中有一个绑定,我希望调用位于 UserControl1 的视图模型上的命令。

但我找不到让它工作的方法。欢迎任何帮助。非常感谢。

这是我的绑定不起作用:

<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>

4

1 回答 1

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 位于不同的窗口中,因此您无法像通常那样访问数据上下文。
您将不得不对此进行调整,以便将包含Command您所寻找的对象设置为StackPanel(即PlacementTarget您的ContextMenu)的标签。

于 2012-04-05T08:38:19.797 回答