2016-09-21 4 views
0

Я читал сообщения большую часть дня и не могу найти это или понять это. Практически все вопросы и ответы создают меню в XAML, но я пытаюсь сделать это в коде.Как связать команду с MenuItem в C# WPF

Меню строит отлично (там больше, просто сокращенно здесь) и включает или отключает правильно, но я не могу выполнить команду для выполнения. На ленте меню есть кнопка, которая повторно возвращает, поэтому я знаю, что код на задней панели работает, я просто не могу понять, как его вызывать из меню. Любые идеи были бы хороши.

Событие мыши для создания и отображения меню из MainView.xaml.cs. На линии, которая нуждается в исправлении, есть **.

private void MainDataGrid_MouseRightButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    ContextMenu m = new ContextMenu(); 
    MenuItem mi = new MenuItem(); 

    m.Items.Add(new MenuItem()); 
    mi = (MenuItem)m.Items[0]; 
    mi.Header = "Resubmit"; 
    **mi.CommandBindings.Add(new CommandBinding(ApplicationCommands.New, ResubmitCommand));** 
    mi.IsEnabled = MainViewModel.CurrentSelectedItems.Count > 0; 
    . 
    . 
    . 
    m.IsOpen = true; 
} 

The ResubmitCommand из моих MainViewModel.cs:

public ICommand ResubmitCommand 
{ 
    get 
    { 
     return _resubmitCommand ?? 
     (_resubmitCommand = new RelayCommand(
     o => Resubmit(), 
     o => CanResubmit)); 
    } 
} 

Спасибо.

+0

Это действительно усугубляет то, что кто-то голосует что-то, когда они слишком цыпленок, чтобы опубликовать комментарий, объясняющий почему. Если вы не можете придумать причину, оставьте ее в покое. – CodeChops

ответ

1

Вы можете просто установить Command свойство пункта меню:

mi.Command = ResubmitCommand; 

По умолчанию, ApplicationCommands.New поддерживает только входной жест Ctrl+N и обычно связан с e главное окно. Вы можете привязать его к щелчку левой кнопкой мыши по элементу меню:

mi.CommandBindings.Add(new CommandBinding(ApplicationCommands.New,Resubmit)); 

var leftClickGesture= new MouseGesture(MouseAction.LeftClick); 
mi.InputBindings.Add(new InputBinding(ApplicationCommands.New, leftClickGesture)); 
+0

Спасибо за ответ, но я попробовал это. Я получаю «The ResubmitCommand» не существует в текущем контексте ». Это фактически в другом классе и выполняется как RelayCommand. Он настроен таким образом для кнопки ленты, но я пытаюсь назвать это из ContextMenu. – CodeChops

+0

Я обновил свой ответ –

+1

Удивительно, что это было сделано. Мне пришлось удалить строку: mi.CommandBindings.Add (новый CommandBinding (ApplicationCommands.New, Resubmit)); и изменить пару вещей в другом месте кода, и это сделало это. – CodeChops

0

линии:

m.Items.Add(new MenuItem()); 
mi = (MenuItem)m.Items[0]; 

должны быть изменены только:

m.Items.Add(mi); 
+0

Это не касается вопроса. – CodeChops

Смежные вопросы