2016-09-21 64 views
0

我一直在阅读职位最多的一天,并不能找到这样或看着办吧。几乎所有的问题和答案在XAML中构建菜单,但我试图在代码中执行此操作。如何将命令绑定到一个菜单项在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; 
} 

的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,通常绑定到th主窗口。您可以将它绑定到菜单项上的左键单击:

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

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

感谢您的回复,但我尝试过。我得到“'ResubmitCommand'在当前上下文中不存在。”它实际上在一个不同的类中,并作为一个RelayCommand来执行。它的设置就像那个带状按钮,但我试图从ContextMenu调用它。 – CodeChops

+0

我更新了我的答案 –

+1

太棒了,就是这么做的。我不得不删除该行:mi.CommandBindings.Add(new CommandBinding(ApplicationCommands.New,Resubmit));并在代码的其他地方修改一些东西,并做到这一点。 – CodeChops

0

的线条:

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

应改为只:

m.Items.Add(mi); 
+0

这并没有解决这个问题。 – CodeChops

相关问题