我不知道在哪里存储WPF应用程序中的数据。有两个原则可能会发生冲突。谁能帮我把这事弄清楚吗?
原则1:数据应存储在模型中。
例如,应该将ObservableCollection<string> Articles存储在模型中。ViewModel中的一个属性可以使它对视图可用。
原则2:依赖视图的国家应存储在ViewModel中。
这意味着应该将具有相应属性string _SelectedArticle的string SelectedArticle变量存储在ViewModel中。
到目前为止,我只将不影响视图的方法或值放入模型中,因为我(可能太过)严格遵循原则2,但我不确定这是否是正确的方法。
我应该在模型中保存一些数据,在ViewModel中保存一些数据,还是有一个存储所有数据的地方?
发布于 2015-10-22 15:32:22
简单的答案是:数据应该存储在它所属的地方。
在您的例子中,模型应该有List<string> Articles。ViewModel将使用这个列表并在构造函数中构建ObservableCollection<string> Articles。SelectedArticle也应该存储在ViewModel中,如果它的值仅用于在视图中导航,并且永远不会在模型中使用或保存到数据访问层的某个地方。
发布于 2015-10-22 15:45:49
模型应该包含需要保存的所有数据,因此,例如,一个person对象--模型包含了Firstname、姓氏、出生日期等。
视图模型然后包装这个模型,并应用在视图和模型之间传递数据所需的任何逻辑,所以如果您想要am Age字段,那么您不需要保存模型中的年龄--您指示视图模型从道布中计算它并将其传递到视图中,同样,业务规则(例如输入验证)也发生在视图模型级别,因此,如果您的用户必须超过18岁,那么在将其传递给模型保存之前,您必须检查出生日期,因此如果您更改了引发属性更改事件(而不是模型事件)的视图模型的名称,也可以使用视图模型进行更改跟踪。
然后,视图控制如何显示数据,从而指示ViewModel中哪些属性的链接。
大多数可选择的控件都将其选定的值定义为功能的一部分,因此,如果希望控件A显示控件B中选择的内容,则将控件A绑定到控制B的选定项属性
在您的例子中,我希望看到一个控制数据库访问或web服务等的文章模型
显示文章文本的ArticlesEditor ViewModel允许使用保存和取消方法对其进行更改,该方法可以从模型中重新加载原始文本,也可以将更改的文本复制到模型中
然后是一个ArticlesList视图模型,它包含可观察到的ArticlesEditor集合,并包含用于创建和删除文章的方法
然后在视图上绑定到ArticlesList.Articles属性,编辑器控件绑定ListViews.SelectedItem属性,编辑器控件的控件将绑定到ArticlesEditor对象的属性
发布于 2015-10-22 15:02:53
所有对视图可见的数据都应该存储在ViewModel中。只需使用调用业务逻辑的视图模型即可。如果您的实体没有映射到视图,如果您显示了什么,则应该使用模型,而不是它的视图模型。
https://stackoverflow.com/questions/33284166
复制相似问题