在 WPF 中使用 RoutedCommands 有什么好处

What is the benefit of using RoutedCommands in WPF

我正在努力了解在 WPF 中使用 Custom RoutedCommands 比标准事件有什么好处。

假设我有一个在静态 class 中声明的自定义 RoutedCommand,如下所示:

public static readonly RoutedCommand Foo = new RoutedCommand();

为了将它连接到 UI 元素,我会这样做:

CommandBindings.Add(new CommandBinding(Commands.Foo, new ExecutedRoutedEventHandler((x, y) => {

            MessageBox.Show("Something Happend");

        })));

好的,通常以一种更简洁的方式,但我的第一个问题是——路由命令如何跟踪这个特定的 UI 元素具有针对它的 CommandBinding? routedcommand 是否在整个应用程序树中跟踪命令绑定,直到它在其命令绑定列表中找到具有正确 routedcommand 的 UI 元素?

我注意到有些东西仍然需要触发这个命令,比如按钮

btn.Command = Commands.Foo;

我的下一个问题,仅在标准事件上创建这些路由命令有什么意义?

主要好处是它在使用 MVVM 时将应用程序的不同层分开。它将代码放在 ViewModel 中并且不会污染您的视图。它还允许命令 Bubble 向上显示可视化树,以便容器控件可以处理其子项的命令。

在我看来,您的示例代码并未真正使用 MVVM,因此如果您不需要冒泡(或隧道)功能,则使用命令可能不会带来任何好处。