2010-06-02 90 views
0

我已經給我的WPF的ListView的上下文菜單:爲WPF列表視圖定義上下文菜單

<TreeView ContextMenuOpening="TreeView_ContextMenuOpening"> 
    <TreeView.ContextMenu> 
     <ContextMenu> 
      <MenuItem Name="NewInputMenuItem" Header="Add" Click="AddInputMenuItem_Click" /> 
      <MenuItem Name="RemoveInputMenuItem" Header="Remove" Click="RemoveInputMenuItem_Click" /> 
     </ContextMenu> 
    </TreeView.ContextMenu> 
    <!-- etc... --> 
</TreeView> 

,因爲我想無論在顯示相同的上下文菜單中,我定義的TreeView而非TreeViewItem上下文菜單是否選擇了一個項目,但是我希望僅當用戶右鍵單擊某個項目時,才能啓用「刪除」菜單項,而不僅僅是菜單中的空白區域。

我目前處理這個的方式是使用TreeView(在TreeView_ContextMenuOpening事件處理程序中)的選定項屬性,但是問題是右鍵單擊樹視圖項會打開該樹的上下文菜單查看而不是更改樹視圖項目的選定狀態。

另外,我不禁想,所有的上面是非常聯合國WPF樣,所以:

  • 我怎樣才能讓這個當用戶在樹視圖項鼠標右擊,該項目被選中。
  • 有沒有更好的方法來實現上述?

回答

0

WPF命令在這種情況下非常有用。我認爲你最好將每個MenuItem綁定到一個命令。通過這種方式,您可以在每個命令中定義何時可以執行此命令。 WPF自動檢查每個命令是否可以在運行時執行。如果他們中的任何人不被允許執行,那麼綁定到該命令的控制將自動失效。在這裏您可以使用此示例代碼爲您CanExcute方法樹視圖的刪除命令:做這個

private bool CanExcute() 
{ 
    if (MyTreeView.SelectedItem != null) 
     return true; 
    else 
     return false; 
} 

,已經選擇了一個項目後,才,去除命令將被啓用。否則其菜單項將被禁用。