首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解WPF -在模型或ViewModel中存储数据

理解WPF -在模型或ViewModel中存储数据
EN

Stack Overflow用户
提问于 2015-10-22 14:58:10
回答 3查看 1.8K关注 0票数 3

我不知道在哪里存储WPF应用程序中的数据。有两个原则可能会发生冲突。谁能帮我把这事弄清楚吗?

原则1:数据应存储在模型中。

例如,应该将ObservableCollection<string> Articles存储在模型中。ViewModel中的一个属性可以使它对视图可用。

原则2:依赖视图的国家应存储在ViewModel中。

这意味着应该将具有相应属性string _SelectedArticlestring SelectedArticle变量存储在ViewModel中。

到目前为止,我只将不影响视图的方法或值放入模型中,因为我(可能太过)严格遵循原则2,但我不确定这是否是正确的方法。

我应该在模型中保存一些数据,在ViewModel中保存一些数据,还是有一个存储所有数据的地方?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-22 15:32:22

简单的答案是:数据应该存储在它所属的地方。

  • 模型应该只包含数据本身--它可能包含来自外部服务、用户输入、数据访问层和其他方面的数据。
  • ViewModels应该将将呈现给用户的部分数据封装到适当的包装中,以便为用户提供查看和更改数据的能力--公共属性、ObservableCollections等。如果应用程序中有许多相同数据的可视化表示,则必须为每个表示(视图)构建适当的ViewModel。
  • 视图使用ViewModel,但还可以在其中包含(和存储)一些验证(而不是验证)逻辑和相关参数。

在您的例子中,模型应该有List<string> Articles。ViewModel将使用这个列表并在构造函数中构建ObservableCollection<string> ArticlesSelectedArticle也应该存储在ViewModel中,如果它的值仅用于在视图中导航,并且永远不会在模型中使用或保存到数据访问层的某个地方。

票数 6
EN

Stack Overflow用户

发布于 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对象的属性

票数 2
EN

Stack Overflow用户

发布于 2015-10-22 15:02:53

所有对视图可见的数据都应该存储在ViewModel中。只需使用调用业务逻辑的视图模型即可。如果您的实体没有映射到视图,如果您显示了什么,则应该使用模型,而不是它的视图模型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33284166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档