Treeview上下文菜单命令未触发

时间:2012-02-27 10:38:28

标签: wpf treeview contextmenu

我有一个树视图绑定到一些属性类型的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是在视图模型中编写的,它在受控制的情况下绑定到它。 我能够看到上下文菜单,但是在点击菜单项时没有触发事件。

请帮助..

1 个答案:

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