Collections MVVM的ViewModel层中的复杂数据结构

Collections MVVM的ViewModel层中的复杂数据结构,collections,mvvm,viewmodel,Collections,Mvvm,Viewmodel,我收集了大量MyFile对象,它们以各种方式相互链接,就像意大利面条一样。 此外,从这个集合中,我创建了一些较小的子集合,这些子集合中的某些项按某些条件相等。 (例如,扩展名为.txt的所有文件、属于某个目录的所有文件等) 基本上,我的业务逻辑中有复杂的链表结构。现在,我想为此创建ViewModel 为了准备观看,这是我碰壁的地方。我就是不知道该怎么准备这堆乱七八糟的东西 同时保持一切高效有序 第一个问题是通过逐项枚举并创建itemViewModel来包装collectionViewModel中

我收集了大量MyFile对象,它们以各种方式相互链接,就像意大利面条一样。 此外,从这个集合中,我创建了一些较小的子集合,这些子集合中的某些项按某些条件相等。 (例如,扩展名为.txt的所有文件、属于某个目录的所有文件等)

基本上,我的业务逻辑中有复杂的链表结构。现在,我想为此创建ViewModel 为了准备观看,这是我碰壁的地方。我就是不知道该怎么准备这堆乱七八糟的东西 同时保持一切高效有序

第一个问题是通过逐项枚举并创建itemViewModel来包装collectionViewModel中的每个集合 将为每个项目创建重复的itemViewModel(因为一个项目可以包含在多个集合中)

第二个问题是如何保持一切更新?例如,如果业务逻辑中的一个item1从item2更改其引用 到item3,则ViewModels应相应地更新它们

我真的很想在这里打破MVVM模式,尽管我不想要它,并将业务+表示逻辑放在这里 在一个对象/类中,因为这种意大利面结构对于我理解MVVM的水平来说似乎有点太多了


谢谢

也许我找错人了,但这是真的

您可以使用一个模型作为所有文件对象的存储库,还可以公开ItemAdded和ItemRemoved事件,以及一个查询方法。然后,您可以拥有一个通用的ViewModel类型,该类型表示您在此模型(ViewModel)上的视图,但通过组合查询进行专门化。通过这种方式,您可以为需要表示的每个视图提供ViewModel+Query(例如,扩展名为txt的所有文件)实例。ViewModel将负责对您的模型执行查询(通过调用query方法),然后将结果转换为可观察的文件项集合(或您拥有的内容)。您可以通过订阅ItemAdded和ItemRemoved事件来更新ViewModel以响应模型更改。如果在ItemRemoved事件中,ViewModel文件项集合包含该项,则将其删除。如果在ItemAdded事件中,该项与该ViewModel实例的查询条件匹配,则将其添加到集合中

这使您可以为所有文件创建一个模型,然后为要表示的每种类型的视图创建一个ViewModel(+Query)实例。ItemAdded和ItemRemoved事件允许您更新ViewModel。由于ViewModels中的项是可观察的集合,因此数据绑定视图将自我更新