在下面的标记中,我在分层模板中使用树视图节点的上下文菜单。问题是我想将上下文菜单项绑定到单个命令,但由于我使用上下文菜单项样式,没有其他方法将命令绑定到菜单项。如何将它们绑定到视图模型根目录中定义的命令。
<HierarchicalDataTemplate x:Key="NodeTemplate">
<StackPanel Orientation="Horizontal">
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Copy">
</MenuItem>
<MenuItem Header="Paste">
</MenuItem>
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.Copy}"/>
<Setter Property="CommandParameter" Value="{Binding Tag}"/>
</Style>
</ContextMenu.ItemContainerStyle>
</ContextMenu>
</StackPanel.ContextMenu>
<TextBlock Text="{Binding Path=Label}" Style="{StaticResource TreeTextStyle}" ToolTip="{Binding Path=Description}" Tag="{Binding Path=Tag}">
</TextBlock>
</StackPanel>
</HierarchicalDataTemplate>
答案 0 :(得分:0)
为什么不呢:
<MenuItem Header="Copy" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.Copy}>
编辑:你是对的它不起作用,因为它是一个ContextMenu,而ContextMenu是在它的PlacementTarget
元素的Visual Tree之外绘制的,因此FindAncestor
不起作用。请尝试以下方法:
Command="{Binding Path=DataContext.Copy, Source={x:Reference view}"/>
确保您为实际视图提供x:Name="view"
。