了解 WPF - 在模型或视图模型中存储数据

Bre*_*eze 2 c# wpf mvvm

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

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

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

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

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

Mik*_*nko 5

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

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

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