c# - 了解 WPF - 在模型或 ViewModel 中存储数据

标签 c# wpf mvvm

我不确定在 WPF 应用程序中的何处存储数据。有两个原则可能会发生冲突。有人可以清理一下吗?

原则一:数据应该存储在模型中。
因此,例如 ObservableCollection<string> Articles应该存储在模型中。 ViewModel 中的属性可以使其对 View 可用。

原则2:依赖于View的状态应该存储在ViewModel中。
这意味着 string _SelectedArticle具有相应属性的变量 string SelectedArticle应该存储在 ViewModel 中。

到目前为止,我只将不影响 View 的方法或值放入模型中,因为我(也许也)强烈遵循原则 2。但我不确定这是否是正确的方法。

我真的应该在 Model 中保留一些数据,在 ViewModel 中保留一些数据,还是有地方可以存储所有数据?

最佳答案

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

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

在你的例子中,模型应该有 List<string> Articles . ViewModel 将使用此列表并构建 ObservableCollection<string> Articles在构造函数中。和 SelectedArticle也应该存储在 ViewModel 中,如果它的值仅用于在 View 中导航并且永远不会在 Model 中使用或保存到数据访问层中某处的 DB 中。

关于c# - 了解 WPF - 在模型或 ViewModel 中存储数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33284166/

相关文章:

c# - Xsd.exe 使用 SubstitutionGroup/anytype 生成不可用的代码

c# - 用于获取给定广告词的网站列表的 google api

c# - 从 JSON 架构创建 WPF UI

wpf - 在 XAML 中设置相对列宽。 '0.5*' 字符串无法转换为长度

wpf - 在 MVVM 和 WPF 中设计模型和状态管理

c# - Lambda 表达式和 InvokeOperation

c# - 在循环突然停止的特定路径中创建 (N) 个目录

c# - 如何在 TreeView 中获取子位置?

c# - 无法从另一个托管的Bootstrapper应用程序卸载WiX托管的Bootstrapper应用程序

silverlight - MVVM-RaisePropertyChanged将代码变成一团糟