将viewmodel中的命令绑定到menuitem和快捷键

时间:2016-03-05 01:48:53

标签: c# wpf mvvm data-binding mvvm-light

我正在使用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等?

1 个答案:

答案 0 :(得分:0)

向Window的InputBindings添加一个InputBinding。

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);
}