为什么MVF中的事件和命令不受WPF / Visual Studio支持?

时间:2009-06-04 13:49:15

标签: wpf events mvvm command

使用MVVM模式创建WPF应用程序时,似乎我必须自己收集必要的工具,以便开始最基本的事件处理,例如:

  • 我从here
  • 获得的附件行为
  • 我从here
  • 获取的委托命令

现在我正在寻找一些方法来处理ComboBox中的ItemSelected事件,并获得技巧和变通方法的建议来执行此操作(使用XAML触发器或将其他元素绑定到所选项目等。好吧,我可以走这条路,但它似乎正在重新发明轮子。只需要一个我可以在我的ViewModel 中处理的 ItemSelected命令就可以了。

我是否缺少一些标准工具或者每个人都在使用WPF进行MVVM基本上构建和组合他们自己的工具集合,以便他们可以使用事件和命令,事情来完成最简单的管道任务使用Click =“eventHandler”在代码隐藏中只占用几行?

5 个答案:

答案 0 :(得分:16)

你对命令的复杂性是正确的。我尝试尽可能接近M-V-VM模式,但我不能仅仅为了处理简单的用户事件而证明复杂的解决方法。

在我看来,如果能够大大简化您的代码,则可以在View中处理用户事件。如果您在View中处理用户事件,View的代码隐藏应立即调用ViewModel上的方法。这样,你仍然在ViewModel中保留你的逻辑......你只需要在View中有一些管道代码(事件处理程序)。我知道M-V-VM纯粹主义者认为View的代码隐藏中应该没有代码,但有时候允许一些简单的样板代码(如事件处理程序)更有意义。请记住,其他人可能必须在将来阅读/修改您的代码,并且比委托命令更容易理解事件处理程序。

答案 1 :(得分:7)

根据约什·史密斯关于MVVM的article,它于2005年10月在John Gossman's blog向全世界揭晓。

从那时起,我会说WPF / MVVM需要2到2年的时间才真正起飞并被社区所接受,到那时为时尚早,改装WPF以支持MVVM的问题。另外我会说WPF创建了MVVM,所以似乎倒退了WPF更改以支持MVVM。

最后,并非所有做WPF的人都使用MVVM,因此API需要支持事件的标准用法等。

所以,回答你的问题,是的,每个人都在将自己的工具集合在一起,因为“官方”支持目前仅提供DelegateCommands框架。

答案 2 :(得分:3)

很高兴听到我不是唯一一个认为指挥实施有矫枉过正的人。数据绑定看起来自然得到了很好的支持,但是我几周来一直试图理解命令绑定除了按钮和从它继承的元素之外的其他东西。

感谢您发布此问题。我想从现在开始,我将通过重定向到视图模型函数来处理视图层中的所有事件。我认为这就是他们在微软XAMLFest为期2天的课程中教授基本MVVM的方式。对我来说足够好了!

答案 3 :(得分:2)

因为MVF是在WPF之后“发明”的......所以为什么大部分的MVVM难题都不是WPF框架的一部分。

不仅如此,MVVM本身在现实世界中被证明/实践之前被宣布为“模式”。这与所有模式完全相反 - 它们通常在成功使用多年后被发现并记录

一个人提出一个模式不是模式制作。

答案 4 :(得分:0)

看一下VisualStudio的MVVM项目模板。

http://blogs.msdn.com/llobo/archive/2009/05/01/download-m-v-vm-project-template-toolkit.aspx

使用此模板,您可以获得各种DelegateCommand类,它们可以满足对ICommands的不同需求,以及一个帮助进行键绑定的CommandReference类。

这是一个好的开始......