将视图模型中的命令绑定到菜单项和快捷键

本文关键字:菜单项 快捷键 绑定 命令 视图 模型 | 更新日期: 2023-09-27 18:37:24

我正在使用MVVM Light构建一个小型WPF应用程序,这是我使用此框架的第一个应用程序。

我的MainViewModel中有许多命令:

public RelayCommand NewCommand { get; private set; }
public RelayCommand OpenCommand { get; private set; }
// etc.
public MainViewModel() {
    NewCommand = new RelayCommand( CreateNewFile, CanCreateNewFile );
    OpenCommand = new RelayCommand( OpenFile, CanOpenFile);
    // etc.
}

在我的 XAML 中,我有一个菜单:

<DocPanel>
    <Menu Name="MainMenu">
        <MenuItem Header="File">
            <MenuItem Header="New" Command="{Binding NewCommand}" />
            <MenuItem Header="Open" Command="{Binding OpenCommand}" />
            <!-- etc. -->
        </MenuItem>
    <Menu>
</DocPanel>

一切都很好。但是如何将这些命令绑定到常用的键盘快捷键,例如 Ctrl-N 表示新命令,Ctrl-O 表示打开命令等?

将视图模型中的命令绑定到菜单项和快捷键

将 InputBinding 添加到 Window 的 InputBindings 中。

private MainViewModel m_ViewModel = new MainViewModel();
public MainWindow()
{
    InitializeComponent();
    this.DataContext = m_ViewModel;
    var keyGesture = new KeyGesture(Key.N, ModifierKeys.Control);
    var keyBinding = new KeyBinding(m_ViewModel.NewCommand, keyGesture);
    this.InputBindings.Add(keyBinding);
}