【发布时间】:2011-12-13 10:39:52
【问题描述】:
我正在尝试学习 MVVM 软件设计模式。我有 Matthew MacDonald 的书“C# 2010 中的 Pro WPF”来帮助我更好地学习 WPF。在尝试开始学习 MVVM 时,我查看了 WindowsClient.net 网站,尤其是 Todd Miranda 的视频“我如何:使用 MVVM 模式构建数据驱动的 WPF 应用程序”。他在其中简要讨论了 RoutedCommand,但编写了自己的基于 ICommand 接口的 RelayCommand 类的实现。这看起来很有希望,但是我遇到了一个问题,因为我正在开发的窗口(一个带有文本框的简单窗口,以及使用用户输入的参数进行搜索并在列表框中返回结果的按钮)比托德做了什么。基本上,我找不到一种方法来获取用户在我编写的 RelayCommand 类中输入的搜索参数,该类返回一个我称为 AllClients 的 ObservableCollection(显示在列表框中)。 MacDonald 的书讨论了 RoutedCommand,尤其是 RoutedUICommand,坦率地说,这看起来对我正在尝试做的事情充满希望。然而,为了更好地理解 MVVM 模式,我快速浏览了 Amazon 上可以帮助学习 MVVM 模式的书籍,并找到了一些书籍,例如 Gary Hall 的“Pro WPF 和 Silverlight MVVM”。在那本书中,霍尔似乎强烈建议 RoutedCommand 路线不是要走的路。这是有问题的,因此最好使用 RelayCommand。
好吧,坦率地说,我真的很困惑。首先,我根本不理解霍尔的论点。为什么使用 RoutedCommands(或者可能是 RoutedUICommands)是一个糟糕的选择?为什么使用 RelayCommands 如此优越?
【问题讨论】: