Я создаю динамическое контекстное меню. Чтобы это произошло, я пришел с настраиваемой ViewModel, который представляет мой ContextMenu, определяются следующим образом:Bind CommandParameter к свойству объекта-объекта
public class ContextMenuVM {
public object ContextItem { get; set; }
public ObservableCollection<ICommand> Items { get; private set; }
}
Свойство Items
имеет эффективные команды, чтобы показать в Контекстном и свойстве ContextItem
имеет контекстно-элемент, эти команды должны быть выполнены.
Кроме того, у меня есть одноэлементный класс, который содержит все мои различные команды и их реализацию. Так что в конце концов будет метод, который будет вызываться UpdateContextMenu
на ViewModel, владеющей Контекстное, что делает что-то вроде этого:
ContextMenu.Items.Clear();
ContextMenu.Items.Add(SingletonClass.Instance.CommandA);
if (condition)
ContextMenu.Items.Add(SingletonClass.Instance.CommandB);
Контекстное iteself в XAML определяется следующим образом:
<ContextMenu ItemsSource="{Binding Path=ContextMenu.Items}">
<ContextMenu.ItemTemplate>
<DataTemplate>
<ContentControl>
<MenuItem Command="{Binding}" CommandParameter="what-goes-here?" />
</ContentControl>
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
Чего я не могу добиться, так это получение привязки CommandParameter
к работе. Как я должен привязываться к свойству ContextItem
экземпляра ContextMenuVM
?