为什么RelayCommand或DelegateCommand不属于WPF?

时间:2011-06-24 14:19:01

标签: .net wpf mvvm relaycommand delegatecommand

Model-View-ViewModel(MVVM)方法似乎是WPF UI开发中的领跑者模式。我读过的几乎每篇文章都暗示这是最好的做法。在许多文章中使用RelayCommand或DelegateCommand也很突出,似乎几乎不可能在不使用它们(或任何其他变体)的情况下实现MVVM。那么为什么它们不是.NET 4的一部分呢?

我知道RelayCommand实现起来非常简单,许多第三方工具包已经拥有它但我只是想知道微软为什么会遗漏一些所谓“最佳实践”的基本和基本的东西?

3 个答案:

答案 0 :(得分:2)

因为Microsoft负责WPF,而不是MVVM。

如果你想要一个包含好MVVM应用程序所需的所有组件的完整工具包,我建议你看一下Prism:A good tutorial here

基本原因是微软专注于“主流”WPF功能(如增强控件和绑定)。 MVVM是,如果我是对的,由MVVM基金会“监督”。

答案 1 :(得分:1)

与大多数事情一样,它取决于金钱。它可能是一个简单的类,但在.NET中包含它需要大量的工作。单个班级必须是:

  1. 发布前经过全面测试。还必须为将来的版本实施回归测试。
  2. 以多种语言完整记录,也必须经过验证。
  3. 必须重命名,因为使用RelayCommand或DelegateCommand很可能会破坏那些已经有这些类的WPF,因为会有命名冲突。
  4. 这些都需要比你期望的更多的工作(即#2将有初稿,修订,最终批准等)。

    找到相关链接here

答案 2 :(得分:0)

我个人对此的看法是RelayCommands破坏了MVVM的意图。

在我看来,为每个目的实现单个命令比使用RelayCommands更“最佳实践”,因为每个类都服务于“单一责任”。命令应该将其行为封装在自身中,而不是将其委托给视图模型。

调试RelayCommands不那么直接,当你必须逐步执行某些功能/动作/委托并从对象跳转到对象时,这是一个真正的痛苦。