2012-02-27 88 views
2

我有一个treeview绑定到一些属性类型的Observable集合。有一个HierarchicalDataTemplate显示树状视图中的数据。现在我需要为每个HierarchicalDataTemplate项目显示特定的上下文菜单。Treeview上下文菜单命令没有触发

我用下面的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

你的命令绑定将无法工作,因为文本菜单是不是在同一个逻辑树为您的用户控件,因此它不会找到该用户控件的祖先。然而你的ContextMenu应该自动继承它的容器的datacontext。 所以这应该工作 -

<ContextMenu> 
     <MenuItem Header="Create" Command="{Binding AddCommand}" CommandParameter="{Binding}"/> 
</ContextMenu> 

然而AddCommand属性应该在你的HierarchicalDataTemplate绑定项存在。

编辑:

如果你的命令不是在你的HierarchicalDataTemplate的绑定项,而是在你的用户控件定义。然后另一个想你可能会尝试给你的UserControl一个名字,然后通过ElementName将命令绑定到它。像这样

再次更新:

<ContextMenu> 
     <MenuItem Header="Create" Command="{Binding ElementName="MyUserControl" Path="DataContext.AddCommand"}" CommandParameter="{Binding}"/> 
</ContextMenu> 
+0

这个力解决问题。 Command not firing still – Arihant 2012-02-27 11:32:27

+0

如果AddCommand的属性不在HierarchicalDataTemplate的绑定项目中,则不起作用。是这样吗? – Dror 2012-02-27 11:34:55

+0

我更新了我的答案,请检查它现在是否有效。 – Dror 2012-02-27 11:38:34

相关问题