gpt4 book ai didi

c# - 如何使用RouteUICommand?

转载 作者:行者123 更新时间:2023-12-03 10:13:32 26 4
gpt4 key购买 nike

我目前正在重构我的程序以使用 MVVM。我已经尝试使用命令两天了,但我根本找不到使用它们的好方法。
快捷方式只能与 RoutedCommands 和 RoutedUICommands 一起使用,必须在代码隐藏文件中定义 CanExecute 和 Executed 事件处理程序才能访问 ui 元素,这会降低可重用性。
如果命令是在 View 模型中定义的,则无法访问 ui 元素。
两个例子来说明我在这里所说的:

  1. 我在 DataGrid 中有一个项目列表。当双击 DataGrid 时,应在另一个窗口中打开所选项目。如何在 MouseDoubleClick 事件上调用命令?
  2. 组合框包含一个值列表。按钮打开一个新窗口,向该列表添加一些内容。窗口关闭后,应选择新值。
    我认为应该使用 CommandTarget 属性,但是这怎么可能用 RoutedUICommands 实现呢?

最佳答案

在我看来,您需要使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com