这个问题可以总结为:使用MVVM Light在UWP上开发清晰应用程序的最佳方式是什么?也许我错过了,但我没有找到样品或类似的…
我看到了很多讨论和变化:模型——我是只在这里放数据,还是应该创建DAL模型?如果我使用EF,我需要2层(DAL和Model(吗?
它应该是可观察的吗?加载/保存或填充方法应在此处或DAL中?
然后我们转到更高的级别:如果你在一个类中有一个列表(例如公司-员工(,那么list对象在Model中还是在ViewModel中?
但是,如果我在EF上通过LINQ收集了模型公司和公司列表(list(,我该如何将其转换为ObservableCollection<CompanyViewModel>
?我应该做一个循环并添加新对象吗?不是很有效率也很好。。。难道没有更好的办法吗?
模型是否引发ContentChanged?(在我看来,答案是否定的,应该由视图模型提出(
对于ViewModel,您是根据视图映射视图模型(因此主要形式为ViewModel、TreeView ViewModel(还是根据数据(CompanyViewModel
(映射视图模型?或者两者都有(在这种情况下,为什么?(?
所有ViewModel都应该是Observable的,所以所有操作都应该引发这里或下面更改的内容?
我已经看到了所有可能的答案,所以这就是为什么我要问:;哪条路是"黄金"路?"最佳实践"?我知道几乎所有这些都"可行",但我的目标是知道"最好的"(即从设计角度来看更高效、更干净等(
在将数据源中的更改传播到UI的情况下,您建议的循环并添加新对象的解决方案并不像听起来那么糟糕。如果您的数据源包含一个"上次更改"属性,该属性允许您仅筛选实际更改,则您只能获得更改后的数据。否则,无论如何都必须查询项目的全部数量,因此对数据进行另一个循环不会改变复杂性(仍然与项目数量呈线性关系(。如果你有某种id,那么你可以检查ObservableCollection
中是否存在这样的id,然后添加它。
对于你的第二个问题,根据我的经验,你构建和划分视图模型的方式是个人偏好的,可能因情况而异。我通常为页面创建视图模型,然后创建视图模型来包装数据模型图模型。然后,这些可以作为页面本身的视图模型的属性进行访问——这样可以正确地分离关注点。