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

时间:2010-06-21 23:37:18

标签: collections mvvm viewmodel

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

基本上我的业务逻辑中链表的结构很复杂。现在我想为此创建ViewModel 为了准备它,这是我撞墙的地方。我只是无法弄清楚如何准备这个烂摊子 并且仍然保持一切有效和有条理。

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

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

即使我不想要它,我也很想摆脱MVVM模式,并放置bussines +表示逻辑 在一个对象/类中,因为这种意大利面结构对于我对MVVM的理解程度来说似乎有点过分。

由于

1 个答案:

答案 0 :(得分:0)

也许我在这里咆哮错误的树,但是这里也是。

您可以拥有一个模型,它充当所有文件对象的存储库,并且还公开ItemAdded和ItemRemoved事件以及Query方法。然后,您可以使用一个公共ViewModel类型来表示此模型上的视图(ViewModel),但通过编写查询来实现。通过这种方式,您可以为每个需要表示的视图设置ViewModel + Query(例如,所有带扩展名为txt的文件)实例。 ViewModel将负责在您的Model上执行查询(通过调用查询方法),然后将结果转换为可观察的文件项集合(或者你有什么)。您可以通过订阅ItemAdded和ItemRemoved事件来更新ViewModel以响应Model更改。如果在ItemRemoved事件上,ViewModel文件项集合包含该项,则将其删除。如果在ItemAdded事件上该项与该ViewModel实例的查询条件匹配,则将其添加到集合中。

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