使用MVVM,一种类型的ViewModel包括他们作为Field重复的模型 .
所以我有一个CompanyModel和一个CompanyViewModel,它有一个CompanyModel实例 .
该CompanyModel有一系列属于它的Divisions . 所以CompanyModel有一个List(或一些集合类) .
现在,CompanyViewModel希望将这些部门表示为 ObservableCollection<DivisionViewModel>
;你可以在CompanyViewModel中添加新的Divisions .
确保ObservableCollection和Models集合保持同步的最佳方法是什么?所以当我添加一个新的DivisionViewModel并保存它时,它会自动将其模型保存到CompanyModel的 List<Division>
?
我有更多像这样的父/子关系的类,所以我想要一些我可以在AbstractViewModel类中重用或实现的东西 .
注意:我的ViewModel实现了IEditableObject
1 回答
可能最简单的方法是创建一个继承自ObservableCollection的新类,它将源列表和各种初始化和映射函数作为参数 . 它的签名可能如下所示:
然后,您需要处理CollectionChanged事件,在添加新的Destination实例时创建新的Source实例,在删除现有的Destination实例时删除现有的Source实例,这类事情 . 您可以使用上面的“新”函数来创建各种实体的新实例,并且您可以在各种Linq查询中使用上面的“map”函数,这样您就可以弄清楚,例如,viewmodel的哪个实例ObservableCollection映射到List中的模型 .
您可以在上面的示例中使用它,也许如下:
确切的实现留给读者一个练习:-) . 但我在以前的项目中使用了这样的课程并取得了一些成功 . 只要确保你围绕它进行一些好的单元测试,这样你就知道你可以依赖它,并且不必花费大量时间来寻找事件处理的callstack .