Я пытаюсь предоставить элементы контекстного меню с различным внешним видом и функциональностью, но я не могу найти способ привязать команды к этим элементам. Модель просмотра каждого элемента меню выводится из одного класса AbstractEntryViewModel
. Вот укороченный пример структуры моего текущего проекта. Использование ContextMenu.Resources
- это единственный способ привязать шаблон к определенному типу.Привязать команду `DataTemplate` в` ContextMenu` при использовании нескольких шаблонов?
<ContextMenu ItemsSource="{Binding Entries}">
<ContextMenu.Resources>
<DataTemplate DataType="{x:Type local:NopEntryViewModel}">
<!-- Content -->
</DataTemplate>
<HierarchicalDataTemplate
DataType="{x:Type local:GroupEntryViewModel}"
ItemsSource="{Binding Entries}">
<!-- Content -->
</HierarchicalDataTemplate>
<!-- More templates -->
</ContextMenu.Resources>
</ContextMenu>
internal abstract AbstractEntryViewModel : INotifyPropertyChanged {
public abstract void Invoke();
// ...
}
internal NopEntryViewModel : AbstractEntryViewModel {
public override void Invoke() {}
}
internal GroupEntryViewModel : AbstractEntryViewModel {
public override void Invoke() { /* ... */ }
// ...
}
// More view models
Обычно я могу связать команду к MenuItem
как так
<MenuItem Command="{Binding StaticResourceOrViewModelProperty}" />
Как я могу сделать то же самое с шаблонами данных? Есть ли невидимый контейнер, оболочка для содержимого шаблона данных, который я могу использовать для привязки команды?
WOW, работает как шарм и не прерывает MVVM :) При использовании дополнительного setter ' ', фактический экземпляр модели представления передается в команду. Большое спасибо :) –
Cubinator73