У меня есть TreeView, где я показываю элементы, связанные через TreeViews HierarchicalDataTemplate.ItemsSource
. Контекстное меню TreeView изменяется в зависимости от того, какой элемент выбран. Элементы меню зависят от выбранного элемента. Это означает: контекстное меню построено полностью динамично. Для этого я написал класс MenuItemModel
, который служит бизнес-объектом для элемента меню. Например:WPF Build ContextMenu динамически через MVVM
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