我目前正在重构我的程序以使用MVVM。我现在尝试使用命令2天,但我找不到使用它们的好方法。
快捷方式只能与RoutedCommands和RoutedUICommands一起使用,必须在代码隐藏文件中定义CanExecute和Executed事件处理程序才能访问ui元素,从而降低了可重用性。
如果在viewmodel中定义了命令,则无法访问ui-elements。
2个例子来说明我在这里说的话:
答案 0 :(得分:5)
听起来我需要使用RelayCommand
或类似内容。这是一个扩展ICommand
接口而不 RoutedCommand
的类...您可以将其视为delegate
命令。您可以简单地定义命令逻辑和 canExecute
内联处理程序,而不是为每个命令定义单独的类。这是一个简化的例子:
public ICommand SaveCommand
{
get { return new RelayCommand(execute => Save(), canExecute => CanSave()); }
}
您可以在GitHub上的RelayCommand.cs页面找到它的实现,并在MDSN杂志的Commands, RelayCommands and EventToCommand页面中找到它的描述。
最后,您可以使用KeyBinding
类设置这些命令的键盘快捷键:
<KeyBinding Gesture="CTRL+S" Command="{Binding Save, Mode=OneWay}" />
答案 1 :(得分:0)
由于无法通过问题给出所需的答案,我将自己回答 我使用Commands作为我的viewmodel的静态属性,这是一个糟糕的方法。切换到普通属性后,一切都像魅力一样!