在 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,因此如果您不需要冒泡(或隧道)功能,则使用命令可能不会带来任何好处。
我正在努力了解在 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,因此如果您不需要冒泡(或隧道)功能,则使用命令可能不会带来任何好处。