我有一個TreeView,其中顯示通過TreeViews HierarchicalDataTemplate.ItemsSource
綁定的項目。 TreeView的上下文菜單根據選擇的項目而改變。菜單項取決於所選項目。這意味着:上下文菜單是完全動態構建的。爲此,我編寫了一個MenuItemModel
類,它用作菜單項的業務對象。像這樣:WPF通過MVVM動態構建ContextMenu
public class MenuItemModel : ViewModelBase
{
public string Header { get; set; }
public string Icon { get; set; }
public ObservableCollection<MenuItemModel> ChildItems { get; set; }
public UiCommand Command { get; set; }
}
到目前爲止好。但現在我有兩個問題:
問題1如何在菜單中顯示分隔符?我有另一個課程SeparatorMenuItemModel
,我打算用於分隔符。但在這種情況下,我的ContextMenu需要包含Separator
而不是MenuItem
。我怎樣才能做到這一點?
問題2我試圖使用DataTemplate
來定製我的MenuItems的顯示方式。但是這不會改變菜單本身,只是內容部分。我不得不爲ControlTemplate
這個,但我怎麼能讓我的菜單改變ControlTemplate
我可以用DataTemplate
做什麼?
我 「SeparatorMenuItemModel」 從MenuItemModel派生。所以這不是問題。我正在討論如何根據數據類型使我的菜單顯示「MenuItem」或「Separator」。 對於ControlTemplate:是的,我知道。我只是想知道是否有某種「ControlTemplateSelector」機制可用。 – Hemisphera