【问题标题】:contextsensitive RoutedUICommand.CanExecute, Execute上下文相关的 RoutedUICommand.CanExecute,执行
【发布时间】:2009-02-11 08:39:23
【问题描述】:

我有一个 RoutedUICommand,可以通过 UI 中的不同位置进行访问。如全局Keyboardshortcut、Menu、ContextMenu或Button。要在 RoutedUICommand.CanExecute 和 RoutedUICommand.Execute 方法中执行的代码取决于所使用的 UI 元素。我怎样才能实现这种差异化。我在想我可以使用 (Can)ExecutedRoutedEventArgs.Source 或 OrigianlSource 但来源总是相同的。它是主根窗口。这通常是如何实现的?我可能做错了什么?

【问题讨论】:

    标签: wpf routed-commands


    【解决方案1】:

    如果您需要根据调用命令的 UI 运行不同的代码,您可能做错了什么。

    如果您只是通过按键执行某项操作或打开一个对话框,要求从菜单中获取更多信息,您应该将其分成两个命令(如 MS Office“打印”和“快速打印”命令)。

    如果您确实必须对每个 UI 元素执行不同的操作,那么您不会从使用命令中获得任何好处,并且应该考虑使用老式的事件处理程序,至少元素特定代码与元素相关联,而不是存储在一个包罗万象的“执行”代码。

    如果您选择忽略我上面的建议,请查看 CommandParameter 属性,您可以为每个 UI 元素设置不同的参数值,至少您可以保持 UI/Logic 分离的错觉命令旨在提供。

    【讨论】:

      【解决方案2】:

      通常,您可以为不同的“目标”使用不同的 CommandBinding 实现 - 每个“源”具有不同的行为是不寻常的。

      您能否举例说明您正在尝试做什么?

      【讨论】:

      • 正是为了拥有不同的源,我不得不为 esch 源连接命令绑定。这样我就可以通过检查发件人来区分谁是来源。
      猜你喜欢
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      相关资源
      最近更新 更多