2014-04-03 68 views
0

我的應用程序包含TreeView,它支持一組命令,但命令可能會在菜單間移動,只出現在某些菜單上,而不會出現在其他菜單上,在多個菜單上共享等。將ContextMenu項目動態綁定到靜態定義的MenuItems

我知道我在編譯時支持的所有命令的集合,因此理論上我可以在我的<TreeView.Resources>部分中定義一個<MenuItem>資源,其中每個資源都具有x:Key屬性。但是,對於單擊的任何給定節點,只能在運行時確定出現的菜單項。我可以將ContextMenu.ItemsSource綁定到我的應用程序中返回MenuItem[]的東西,但爲了構建這個數組,我需要訪問靜態定義在XAML文件中的MenuItems。

我這樣做是錯的嗎?還是有辦法做我想做的事?

回答

2

將您的ContextMenu.ItemsSource綁定到MenuItem [],而不是ObservableCollection < YourMenuClass>。 YourMenuClass應該包含你想綁定的頭部和其他參數,也許是一個命令。然後使用模板生成菜單項。

<ContextMenu ItemsSource="{Binding MenuItemList}"> 
      <ContextMenu.ItemTemplate> 
       <DataTemplate> 
        <MenuItem Header="{Binding Path=Name}" Command="{Binding MyCommand}" /> 
       </DataTemplate> 
      </ContextMenu.ItemTemplate> 
    </ContextMenu> 
+0

當我這樣做時,MenuItem看起來很有趣。它是拉長的,在MenuItem的左側和右側有大量的填充,我不知道爲什麼。下面是我添加了2個菜單項的示例。 http://i.imgur.com/O8is6O1.png 請注意,較暗的高光矩形特別奇怪。如果我將鼠標懸停在較暗的矩形邊界之外,它會消失。 這就像ContextMenu本身不知道如何正確確定尺寸。 –

+1

出於某種原因,我必須在中使用,然後才能正常工作。我想否則它把MenuItem放在另一個MenuItem中?不知道它如何在幕後工作,但更改修復它。儘管如此,我還得把Command放在別的地方。在這種情況下,我通過在TargetType =「MenuItem」 –

+0

上使用來得到它的效果。對了,我很抱歉,但我無法解釋這種行爲。 – Chrille