我有一个包含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>
答案 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>