Учитывая, что у вас есть коллекция предметов, управляющих командованием, я бы порекомендовал использовать что-то похожее на второе предложение Уилла, подобное этому:
<MenuItem
Command="{Binding MenuCommand}"
CommandParameter="{Binding}"
Header="{Binding DisplayText}" />
На стороне ViewModel вы можете использовать DelegateCommand или RelayCommand для подключения вашего метода-обработчика. Это позволяет вам проверять данные пункта меню и делать все, что вам нужно, основываясь на том, что в нем есть.
public DelegateCommand<MyMenuObject> MenuCommand { get; private set; }
public ViewModel()
{
MenuCommand = new DelegateCommand<MyMenuObject>(MenuCommandExecuted);
}
public void MenuCommandExecuted(MyMenuObject parameter)
{
// do something based on the parameter object
}
Вам также необходимо либо передать MenuCommand в свойство ICommand элементов вашей коллекции, чтобы использовать приведенную выше простую форму привязки, либо изменить привязку команды, чтобы использовать что-то вроде RelativeSource FindAncestor для поиска дерева в DataContext родителя (ViewModel) для MenuCommand. Использование этого подхода позволяет гибко добавлять или удалять элементы из коллекции, и нет необходимости вносить какие-либо изменения в пользовательский интерфейс для поддержки нового набора элементов.
Prism DelegateCommand
RelayCommand