0

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

4

2 回答 2

1

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

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

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

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

于 2009-02-11T10:31:53.230 回答
0

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

你能举一个你正在尝试做的例子吗?

于 2009-02-11T09:59:23.197 回答