9

RoutedCommand 和 RoutedUICommand 对他们有很大帮助。内置对文本和键盘手势的支持。您可以将 RoutedUICommands 集合绑定到菜单的 ItemsSource,它会自动为您创建和绑定菜单项。开箱即用的控件自动支持某些命令(剪切、复制、粘贴)。

然而,每当我使用 MVVM 时,我发现路由命令并不适合,因为重复的样板 XAML 和代码隐藏我必须为每个命令编写。当我在做 MVVM 时,我通常会使用RelayCommand而不是路由命令。这在某些时候是一个足够的解决方法,但它也有缺点——例如,按键手势变得更加复杂

但是在观看了 Rob Eisenberg 的“构建你自己的 MVVM 框架”课程之后,我不再对中继命令及其缺点感到满意。路由命令的唯一问题是重复的样板代码,一旦您将重复代码分解到框架中并应用约定,似乎不再有任何理由不在 MVVM 中使用路由命令。

从技术上讲,这看起来并不难。框架应该只需要绑定到视图的CommandManager.CanExecuteExecuted事件,并应用约定来查找 ViewModel 上的方法和属性——例如,当执行 Cut 命令时,查找 ExecuteCut 方法(和 CanExecuteCut 属性) 在 ViewModel 上。我可以构建自己的 MVVM 框架,让这一切变得简单。

但我的问题是,是否已经有与 RoutedCommand 一起使用的 MVVM 框架?我熟悉的唯一 MVVM 框架是 Caliburn.Micro,它目前不支持这种方式的路由命令(这让我感到惊讶,因为它确实支持自己的动作冒泡风格)。

4

2 回答 2

2

在SO和其他站点进行了大量的研究马拉松,没有找到任何合适的框架来玩 RoutedCommand。

但是其中一位 WPF 门徒Josh Smith实现了一个很好的解决方案,即使用 MVVM 路由命令。

您可以在 WPF 中检查 Using RoutedCommands with a ViewModel,它被声明为在 MVVM 架构中使用 RoutedCommands 时干净且轻量级。

于 2011-01-11T14:33:32.553 回答
1

如果我没记错的话,Sacha Barber 在那个方向做了一些事情,我想你可以看看这里

于 2011-01-10T13:00:13.803 回答