问题描述
我是一工作一年的WPF程序员,现在在使用MvvmLight,慢慢的深入之后,我发现我做的项目虽然能在.cs文件中不写逻辑代码,但是在ViewModel也会有直接操作控件的情况,就是把控件当参数传递给ViewModel,这种直接操作控件而非操作数据的做法是否违背了mvvm的精神或者什么的,感觉不是纯粹的mvvm了,我就是我的困惑。
解决方案
解决方案二:
有什么情况需要把控件传递给viewmodel呢?你应该想办法用数据绑定和触发器来代替viewmodel中对控件进行的操作
解决方案三:
viewmodel应该是和view无关,也就是说,view中绑定的viewmodel中的方法应该都是无参的,所有viewmodel所需要的信息都应该通过数据绑定获取。写得好的viewmodel完全可以脱离view完成业务逻辑,这也是MVVM的一个优点,可以做单元测试。当然,也不是说,完全就不能要view的cs文件。有些功能是和业务无关的操作,也是应该写到view的cs文件的。例如,无边框窗体实现拖动
解决方案四:
我认为有用户交互逻辑的话,是需要view内部进行处理的。而数据的处理,交给viewmodel
解决方案五:
引用1楼songbing774933的回复:
有什么情况需要把控件传递给viewmodel呢?你应该想办法用数据绑定和触发器来代替viewmodel中对控件进行的操作
或许是我编程的思想还没转变过来,总想着去操作控件,没有基于MVVM的思想去解决问题
解决方案六:
引用2楼songbing774933的回复:
viewmodel应该是和view无关,也就是说,view中绑定的viewmodel中的方法应该都是无参的,所有viewmodel所需要的信息都应该通过数据绑定获取。写得好的viewmodel完全可以脱离view完成业务逻辑,这也是MVVM的一个优点,可以做单元测试。当然,也不是说,完全就不能要view的cs文件。有些功能是和业务无关的操作,也是应该写到view的cs文件的。例如,无边框窗体实现拖动
受教了
时间: 2024-12-03 07:19:16