Mar*_*tus 8 c# wpf binding mvvm
我知道已经有关于该主题的问题,但其中的问题在某种程度上与其他问题有关,并没有提供确凿的答案.
特别是那里:问题1,问题2,当然还有问题3 所以请不要太快关闭这个问题.他们回答那里只是说"做这个,做那个"而不是为什么!
有些人否认需要a ViewModel
并且说"标准"方式是直接绑定到模型.这是我否认并试图用技术论证来证明的.
从我在后台MVC
,MVP
,Presentation Model
,它只是很自然地我使用ViewModel
.也许我错过了一个重点?
所以对我来说,默认是绑定到a ViewModel
,无论它Model
是什么(无论它是否实现INotifyPropertyChanged
).
我看到绑定到s的原因有几个ViewModel
,包括(如此处提到的CodeProject和另一篇文章)
1.从视图中删除逻辑
2.安全
3.松耦合
4.发展速度
Prototype ViewModel
层次结构开始并绑定到该层次结构Prototype Model
Model
并且ViewModel
可以开发testdriven,无论ViewView
可完全由设计师,还是具有很强的设计背景开发商建5.解决了"棘手的同步"问题
6.整个项目的结构相同
7.可扩展性
8.分离关切
相反,来自另一个线程的人转储了一些点,包括
如果直接更新模型,则视图模型将不知道触发属性更改事件.这会导致UI不同步.这严重限制了在父视图模型和子视图模型之间发送消息的选项.
如果模型有自己的属性更改通知,则#1和2不是问题.相反,如果包装器VM超出范围但模型没有,则必须担心内存泄漏.
如果你的模型很复杂,有很多子对象,那么你必须遍历整个树并创建第二个对象图,它会遮蔽第一个.这可能非常繁琐且容易出错.
包裹的集合特别难以使用.任何时候(UI或后端)从集合中插入或删除项目,都需要更新影子集合以匹配.这种代码真的很难搞定.
所以,问题是:绑定的默认方式是什么?为什么?
我是否会错过必须拥有ViewModel的点数?
是否有任何想要绑定到模型的真正原因?
最重要的是为什么,而不是如何.
视图模型通常包含的成员,其意在与视图(例如,像特性可使用IsSomethingSelected
,IsSomethingExpanded
,IsSomethingVisible
,任何的实施ICommand
).
你认为有什么理由将所有这些东西带入模特吗?当然不.这就是视图模型存在的原因.
所以,问题是:绑定的默认方式是什么?为什么?
一般来说,我认为拥有ViewModel并绑定它是默认设置.有一个原因是"ViewModel"存在并且是MVVM模式的一部分.
除了纯粹的数据之外,ViewModel还有其他原因.您还通常实现特定于应用程序的逻辑(即:不是模型的一部分,但在应用程序中需要).ICommand
例如,任何实现都应该在ViewModel上,因为它与模型完全无关.
是否有任何想要绑定到模型的真正原因?
在某些情况下,它可能更简单,特别是如果您的模型已经实现INotifyPropertyChanged
.降低代码复杂性是一个有价值的目标,具有自己的优点.
归档时间: |
|
查看次数: |
2645 次 |
最近记录: |