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 ModelModel并且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 次 |
| 最近记录: |