Я новичок в WPF. Как и многие другие, я пытаюсь связать ContextMenu
с ObservableCollection
, чтобы создать динамическое контекстное меню.
Все работает, кроме привязки свойства Command
к свойству TheCommand
класса MenuItemViewModel
, представляющего пункт меню. Команда не запущена. Что я делаю не так?
Для начала, ContextMenu
является дочерним по отношению к Image
и отображается, когда мышь находится над Image
.
<Image.ContextMenu >
<ContextMenu ItemsSource="{DynamicResource ContextMenu}"
где пустое ContextMenu определяется следующим образом:
<Window.Resources>
<local:MenuItemViewModelCollection x:Key="ContextMenu">
</local:MenuItemViewModelCollection>
<HierarchicalDataTemplate DataType="{x:Type local:MenuItemViewModel}"
ItemsSource="{Binding Path=Children}">
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command"
Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}},
Path=DataContext.TheCommand}"/>
<!-- Value="{Binding Path=TheCommand}" /> I tried this too -->
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
</HierarchicalDataTemplate>
</Window.Resources>
Свойство TheCommand
определено ниже:
public class MenuItemViewModel : INotifyPropertyChanged
{
//...
public ICommand TheCommand
{
//...
}
}