2012-02-27 87 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

相關問題