C# 将ICommand绑定到菜单项并指定快捷方式

C# 将ICommand绑定到菜单项并指定快捷方式,c#,wpf,icommand,C#,Wpf,Icommand,我有以下情况: 具有多个ICommand(RelayCommand)属性的ViewModel。这些属性绑定到视图中的菜单项。某些菜单项应具有键盘快捷键。为此,我尝试使用窗口的InputBindings。这是可行的,但我必须手动将InputGestureText分配给MenuItem。所以我想有更好的方法将ICommand绑定到MenuItem并指定快捷方式 // ViewModel class MyViewModel: ViewModelBase { public ICommand Te

我有以下情况:

具有多个ICommand(RelayCommand)属性的ViewModel。这些属性绑定到视图中的菜单项。某些菜单项应具有键盘快捷键。为此,我尝试使用窗口的InputBindings。这是可行的,但我必须手动将InputGestureText分配给MenuItem。所以我想有更好的方法将ICommand绑定到MenuItem并指定快捷方式

// ViewModel
class MyViewModel: ViewModelBase {
    public ICommand TestCommand {get; set;}
}

// View
<Window...>

    <Window.InputBindings>
        <KeyBinding Command="{Binding TestCommand}" Key="R" Modifiers="Control" />
    </Window.InputBindings>

    // ...
    <MenuItem Name="MenuItemTest" Command="{Binding TestCommand}"
              Header="Test" InputGestureText="Ctrl + R" />

</Window>
//视图模型
类MyViewModel:ViewModelBase{
公共ICommand TestCommand{get;set;}
}
//看法
// ...

属性仅用于设置描述将调用与命令关联的命令的输入手势的文本

它不会以某种方式将输入手势与菜单项相关联;它只是将文本添加到菜单项中。这在MSDN上有记录:


所以不,没有更好的方法来做你正在做的事情:)

也许我迟到了一点,但是:

菜单项上的自动快捷方式提示适用于
RoutedCommand

public static readonly RoutedUICommand NewProject = new RoutedUICommand() { InputGestures = { new KeyGesture(Key.N, ModifierKeys.Control) } };
如果您这样做-您将使您的热键工作(即使在窗口中没有输入绑定),并且您将在绑定到此命令的任何菜单项中看到此热键。这仅适用于
RoutedCommand
(类型在WPF源代码中硬编码)。如果您的命令不是
RoutedCommand
(当您使用
ICommand
模式时,它也不是)-您必须自己设置手势提示


所以有两种选择:使用
RoutedCommand
和事件处理程序(在UI代码中!),或者实现您自己的命令,并使用快捷方式提示做任何您能做的事情。

这是我想回到WinForms的时刻之一:/Why?由于在WinForms中为菜单项指定快捷方式会显示指定的快捷方式-我不必指定文本:)以及关于缺少的投票:请不要误会,您回答了我的问题,我接受了您的答案。但你刚刚确认我做得很好,没有其他办法,所以你没有为我的问题提供“解决方案”。但我会投票给你的答案。。。