将ViewModel置于代码隐藏中是不对的?

Gig*_*igi 4 wpf xaml code-behind mvvm

在MVVM中,我们通常有一个View(XAML +通常是空代码隐藏)以及一个单独的ViewModel.View和ViewModel之间的交互通过数据绑定进行.

假设View只是XAML并且其代码隐藏是空的(通常就是这种情况),使用代码隐藏本身作为ViewModel并将View绑定到代码隐藏的属性是否有任何问题?关注点的分离仍然存在 - 您有一个纯XAML视图和一个ViewModel,它是代码隐藏,它们只通过数据绑定相互通信.ViewModel仍然可以进行单元测试.

这听起来像是异端邪说,但是当代码隐藏实际上是空的时候,我无法想到任何可以证明必须为ViewModel创建单独类的用例.

Bol*_*ock 5

代码隐藏的定义是与视图相关联的代码.在XAML中,这通常通过x:ClassXAML根元素上的属性完成,继承自根元素的基本类型(这总是在自动生成的分部类文件中指定),依此类推.文档中实际上有一小部分概述了WPF XAML中代码隐藏的概念.由于该x:Class属性只允许您指定一个类,因此这基本上将您的XAML标记绑定到一个类.该类代表其代码隐藏.

由于代码隐藏本质上是视图逻辑或XAML标记的底层代码,因此您无法将代码隐藏类视为模型.视图模型完全与视图无关,除了它们通过数据绑定向关联视图提供数据和从其关联视图接收数据的事实; 另一方面,代码隐藏或UI逻辑主要涉及提供查看由XAML表示的对象的行为,而不是应用程序逻辑.

就像其他人所说的那样,如果你可以以某种方式使其工作,那么就编译器而言它并非"错误",但我会说这有点违背代码隐藏的本质.