【问题标题】:Complex data structure in ViewModel layer of the MVVMMVVM 的 ViewModel 层中的复杂数据结构
【发布时间】:2010-06-21 23:37:18
【问题描述】:

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

基本上,我的业务逻辑中有复杂的链表结构。现在我想为此创建 ViewModel 为了为 View 做准备,这就是我碰壁的地方。我只是不知道如何准备这个烂摊子 并且仍然保持一切高效有序。

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

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

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

谢谢

【问题讨论】:

    标签: collections mvvm viewmodel


    【解决方案1】:

    也许我在这里叫错了树,但这里是。

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

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

    【讨论】:

      猜你喜欢
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多