作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在重构我的程序以使用 MVVM。我已经尝试使用命令两天了,但我根本找不到使用它们的好方法。
快捷方式只能与 RoutedCommands 和 RoutedUICommands 一起使用,必须在代码隐藏文件中定义 CanExecute 和 Executed 事件处理程序才能访问 ui 元素,这会降低可重用性。
如果命令是在 View 模型中定义的,则无法访问 ui 元素。
两个例子来说明我在这里所说的:
最佳答案
在我看来,您需要使用 RelayCommand
或类似的。这是一个扩展 ICommand
接口(interface)的类,不是 RoatedCommand
...您可以将其视为一个委托(delegate)
命令。您无需为每个命令定义单独的类,只需内联定义命令逻辑和 canExecute
处理程序即可。这是一个简化的示例:
public ICommand SaveCommand
{
get { return new RelayCommand(execute => Save(), canExecute => CanSave()); }
}
您可以在 RelayCommand.cs 中找到它的实现GitHub 上的页面以及 Commands, RelayCommands and EventToCommand 中的描述MDSN 杂志上的页面。
最后,您可以使用 KeyBinding
类为这些命令设置键盘快捷键:
<KeyBinding Gesture="CTRL+S" Command="{Binding Save, Mode=OneWay}" />
关于c# - 如何使用RouteUICommand?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20950685/
我是一名优秀的程序员,十分优秀!