如何使用RoutedUICommand?

Dom*_*see 2 c# wpf command mvvm icommand

我目前正在重构我的程序以使用MVVM.我现在尝试使用命令2天,但我找不到使用它们的好方法.
快捷方式只能与RoutedCommands和RoutedUICommands一起使用,必须在代码隐藏文件中定义CanExecute和Executed事件处理程序才能访问ui元素,从而降低了可重用性.
如果在viewmodel中定义了命令,则无法访问ui-elements.
2个例子来说明我在这里说的话:

  1. 我有一个DataGrid中的项目列表.当执行双击DataGrid时,应在另一个窗口中打开所选项目.如何在MouseDoubleClick事件上调用Command?
  2. ComboBox包含值列表.按钮打开一个新窗口,向该列表添加内容.窗口关闭后,应选择新值.
    我认为应该使用CommandTarget属性,但是如何使用RoutedUICommands呢?

She*_*dan 5

听起来像你需要使用RelayCommand或类似的.这是扩展一个类ICommand的界面和RoutedCommand......你可以把它作为一个delegate命令.代替定义每个命令一个单独的类的,可以简单地定义命令逻辑canExecute处理程序内联.这是一个简化的例子:

public ICommand SaveCommand
{
    get { return new RelayCommand(execute => Save(), canExecute => CanSave()); }
}
Run Code Online (Sandbox Code Playgroud)

您可以在GitHub上的RelayCommand.cs页面中找到它的实现,并在MDSN Magazine 的Commands,RelayCommands和EventToCommand页面中找到它的描述.

最后,您可以使用以下KeyBinding类为这些命令设置键盘快捷键:

<KeyBinding Gesture="CTRL+S" Command="{Binding Save, Mode=OneWay}" />
Run Code Online (Sandbox Code Playgroud)