我有一个树视图绑定到一些属性类型的Observable集合。有一个HierarchicalDataTemplate在树视图中显示数据。现在我需要为每个HierarchicalDataTemplate项显示特定的上下文菜单。
我使用以下XAML来显示上下文菜单:
<HierarchicalDataTemplate ItemsSource="{Binding Collections}">
<TextBlock Text="{Binding Path=Name}">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="Create" Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.AddCommand}" CommandParameter="{Binding}"/>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</HierarchicalDataTemplate>
这里AddCommand是在视图模型中编写的,它在受控制的情况下绑定到它。 我能够看到上下文菜单,但是在点击菜单项时没有触发事件。
请帮助..
答案 0 :(得分:1)
您的命令绑定将不起作用,因为ContextMenu与UserControl不在同一逻辑树上,因此它将找不到UserControl的祖先。但是,ContextMenu应该自动继承其容器的datacontext。 所以这应该有效 -
<ContextMenu>
<MenuItem Header="Create" Command="{Binding AddCommand}" CommandParameter="{Binding}"/>
</ContextMenu>
但是,HierarchicalDataTemplate绑定项上应该存在AddCommand属性。
修改强>
如果未在HierarchicalDataTemplate的绑定项中定义Command,而是在UserControl中定义。然后另一个人认为你可能会尝试给你的UserControl一个名字,然后通过ElementName将命令绑定到它。喜欢这个
再次更新:
<ContextMenu>
<MenuItem Header="Create" Command="{Binding ElementName="MyUserControl" Path="DataContext.AddCommand"}" CommandParameter="{Binding}"/>
</ContextMenu>