MVVM的正确方法

本文关键字:方法 MVVM | 更新日期: 2023-09-27 18:09:41

我正在努力了解使用视图模型和遗留模型的最佳方式。

我的模型是一个自定义项的集合(如用户配置列表(。

我知道公开这个模型的正确方法是通过ConfigurationListViewModel将模型的列表转换为ui可读的数据。

但是我应该如何管理ConfigurationListViewModel后面的项目呢
单个配置本身是否应该具有ConfigurationViewModel
还是主ConfigurationListViewModel应该处理其项目的曝光?

如果我想将配置添加到ConfigurationList,我会将Add()方法调用到ConfigurationListViewModel,它本身会创建一个新的Configuration,或者我应该在父级中创建一个(ConfigurationConfigurationViewModel?(,然后调用Add([ConfigurationConfigurationViewModel?]newConf)

MVVM的正确方法

实际上,答案是以上任何一个

如果视图模型中使用的数据具有与模型相同的形式,那么创建一个ConfigurationViewModel类(它只是Configuration类的副本(对自己没有任何好处。

至于添加,你可以用任何一种方式。有时,您希望在视图模型中进行所有编辑,这样您就可以通过不实际修改模型来"恢复"更改。如果这不是一个问题,那么首先修改模型并传播到视图模型也是一种有效的方法。

尽管如此,您的任何方法都不会违反MVVM。选择最有意义的内容,尤其是在语义上和将来的维护中。一般来说,我更喜欢简单性,而不是盲目遵守"每个数据对象都需要一个视图模型表示"之类的原则。

根据我的经验,包含ObservableCollection<ConfigurationViewModel>ConfigurationListViewModel是最好的(最灵活、最干净的(方式。只是为了以不同于未选定项目的方式显示选定项目,当项目了解其选定状态时,这很有用。因为模型不应该关心选择,所以您需要一个具有IsSelected属性的ConfigurationViewModel

列表的更新(添加、删除项目((如果由用户/UI触发(应该主要由模型完成。(例如,模型有责任知道新项是如何初始化的。(然后ListViewModel应该相应地更改:从新创建的模型项创建一个视图模型,或者删除其项在模型中被删除的视图模型。