如何将命令绑定到C#WPF中的MenuItem

时间:2016-09-21 21:36:21

标签: c# wpf xaml

我一天中的大部分时间都在阅读帖子,但无法找到或明白这一点。几乎所有问题和答案都在XAML中构建菜单,但我尝试在代码中执行此操作。

菜单构建正常(还有更多内容,只是在这里缩写)并正确启用或禁用但我无法执行命令。菜单功能区上有一个按钮,可以重新提交,所以我知道后端的代码可以正常工作,我似乎无法弄清楚如何从菜单中调用它。任何想法都会很好。

要从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;
}

来自我的MainViewModel.cs的ResubmitCommand:

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

感谢。

2 个答案:

答案 0 :(得分:1)

您可以设置菜单项的Command属性:

mi.Command = ResubmitCommand;

默认情况下,ApplicationCommands.New仅支持Ctrl+N输入手势,并且通常绑定到主窗口。您可以将其绑定到左键单击菜单项:

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

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

答案 1 :(得分:0)

行:

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

应改为:

m.Items.Add(mi);