MVVM的正确方法
本文关键字:方法 MVVM | 更新日期: 2023-09-27 18:09:41
我正在努力了解使用视图模型和遗留模型的最佳方式。
我的模型是一个自定义项的集合(如用户配置列表(。
我知道公开这个模型的正确方法是通过ConfigurationListViewModel
将模型的列表转换为ui可读的数据。
但是我应该如何管理ConfigurationListViewModel
后面的项目呢
单个配置本身是否应该具有ConfigurationViewModel
还是主ConfigurationListViewModel
应该处理其项目的曝光?
如果我想将配置添加到ConfigurationList
,我会将Add()
方法调用到ConfigurationListViewModel
,它本身会创建一个新的Configuration
,或者我应该在父级中创建一个(Configuration
?ConfigurationViewModel
?(,然后调用Add
([Configuration
?ConfigurationViewModel
?]newConf)
?
实际上,答案是以上任何一个。
如果视图模型中使用的数据具有与模型相同的形式,那么创建一个ConfigurationViewModel
类(它只是Configuration
类的副本(对自己没有任何好处。
至于添加,你可以用任何一种方式。有时,您希望在视图模型中进行所有编辑,这样您就可以通过不实际修改模型来"恢复"更改。如果这不是一个问题,那么首先修改模型并传播到视图模型也是一种有效的方法。
尽管如此,您的任何方法都不会违反MVVM。选择最有意义的内容,尤其是在语义上和将来的维护中。一般来说,我更喜欢简单性,而不是盲目遵守"每个数据对象都需要一个视图模型表示"之类的原则。
根据我的经验,包含ObservableCollection<ConfigurationViewModel>
的ConfigurationListViewModel
是最好的(最灵活、最干净的(方式。只是为了以不同于未选定项目的方式显示选定项目,当项目了解其选定状态时,这很有用。因为模型不应该关心选择,所以您需要一个具有IsSelected
属性的ConfigurationViewModel
。
列表的更新(添加、删除项目((如果由用户/UI触发(应该主要由模型完成。(例如,模型有责任知道新项是如何初始化的。(然后ListViewModel应该相应地更改:从新创建的模型项创建一个视图模型,或者删除其项在模型中被删除的视图模型。