我正在学习Silverlight / MVVM。现在我面临着命令的问题,我认为它只是过于复杂。我希望在命令后执行关闭子窗口 根据我的理解,根据概念的分离它应该从视角执行 就我寻找解决方案而言,我找到了它并且对于这样一个微不足道的任务来说并不是微不足道的。
总结一下,我必须说视图,视图模型和模型的分离是很好的想法 从View到ViewModel的绑定也很干净。 但是如何命令。据我所知,它们只是执行代码(如代理)。但它们太复杂而且麻烦。
我想知道你的意见。那么VieModel会拥有属性和普通公共方法的想法,它将从视图事件中执行。如果我不将任何视图相关元素传递给视图模型,它仍然是MVVM,对吧?
当然,还有一个缺点,即我必须将分离的IsEnabled绑定到ViewModel中的属性,以模仿命令的CanUpdate功能。并非您认为ViewModel不了解。 观点不是很可测试,是吗?
这将非常灵活。例如,在click的情况下,我会做一些严格的视图逻辑,从viewmodel对象调用方法,然后可能调用另一个方法,然后再做一些视图逻辑。
那么,您怎么看?
答案 0 :(得分:2)
您可以尝试使用Cailburn.Micro。它是一个在WPF上运行的开源框架,并隐藏了一些复杂性。例如,它只用普通方法调用替换命令类。
您可以通过返回一个特殊结果来实现Windows关闭,该结果将实际关闭视图。这样,您的ViewModel仍然可以完全单元测试,因为您可以检查是否返回了预期结果,并且它不会是视图感知的。
以下是有关如何实现此问题的示例:https://stackoverflow.com/a/10175228/258737