Предположим, ваша ViewModel предоставляет новую команду.Вы можете перенаправить привязку команды Application.New к виртуальной машине с помощью следующего кода.В XAML:
<Window.CommandBindings>
<CommandBinding Command="New" />
...
</Window.CommandBindings>
Тогда в коде вы можете сделать что-то вроде этого.(Мне нравится хранить код вне кода, поэтому я размещаю его в служебном классе.)
foreach (CommandBinding cb in CommandBindings)
{
switch (((RoutedUICommand)cb.Command).Name)
{
case "New":
cb.Executed += (sender, e) => ViewModel.New.Execute(e);
cb.CanExecute += (sender, e) => e.CanExecute = ViewModel.New.CanExecute(e);
break;
}
}
Анонимные методы обеспечивают переход между RoutedUICommand и ICommand.
EDIT: В качестве альтернативы рекомендуется явно устанавливать привязку команды с помощью CommandManager, а не добавлять обработчики.
CommandManager.RegisterClassCommandBinding(typeof(MainWindow),
new CommandBinding(ApplicationCommands.New,
(sender, e) => ViewModel.NewScore.Execute(e),
(sender, e) => e.CanExecute = ViewModel.NewScore.CanExecute(e)));