我理解单元测试对于优先考虑视图模型而不是代码隐藏的好处。但是,我无法理解对实现完全空代码隐藏的痴迷。在编译时,后面的代码和XAML是组合在一起的,所以它们实际上是同一个东西。我喜欢使用XAML,因为它的声明性非常酷。但实际上是否有任何实际理由坚持所有与视图相关的代码都是XAML而不是C#?
答案 0 :(得分:4)
利用Blend在XAML设计时可以做的事情也有一些好处,但这更像是代码隐藏参数中的XAML vs(相同的代码)。对于与MVVM相关的无代码隐藏参数,正如您所指出的那样,真正的目标是将代码移动到可以测试和重用的ViewModel类中。与许多事情一样,这经常被带到极端,人们最终坚持认为,当真正需要的是在代码隐藏中没有业务逻辑时,永远不会有任何代码隐藏,无视 UI逻辑也经常出现。
XAML非常丰富,允许您以声明方式执行大量操作,但仍然存在UI特定的事物(即事件处理程序,某些动画处理),如果不使用某些代码则无法完成。您通常可以通过使用自定义控件,附加属性等内容来管理将此代码移动到代码隐藏之外的其他位置,但如果您没有从中获得任何重用利益,那么可能只是更好地使用代替我做这个UI逻辑。
像MVVM这样的模式是一般指导原则,而不是一套严格遵守的严格规则 - 那些被称为编程语言。 :)答案 1 :(得分:1)
有充分的理由是,通过WPF和XAML,Microsoft旨在保持图形和编码工作的分离。通过这种方式,开发人员和UI设计人员可以轻松地工作。
答案 2 :(得分:1)
一切都与可测试性有关。对你的代码进行单元测试很难(几乎不可能)。使用MVVM,您可以创建完全测试Model和ViewModel的测试工具。
话虽如此,我是务实的粉丝。一些UI事件是使用命令设置的熊,对于那些,我有时会进入代码隐藏。
答案 3 :(得分:0)
视图模型是 XAML的代码隐藏。至少,我就是这么想的。它是一个代码隐藏文件,可以在没有XAML的情况下进行测试。
另一方面,正如本约翰逊所说的那样,除了傻瓜之外,没有人会在视图模型中实施拖放操作。