【问题标题】:Should I use ObservableCollections in my Model in M-V-VM我应该在 M-V-VM 的模型中使用 ObservableCollections
【发布时间】:2010-06-14 08:57:53
【问题描述】:

我对 M-V-VM 完全陌生,对 Silverlight 也很陌生,今天才第一次读到它。作为示例,我正在创建一个包含项目列表的模型。我的 (Silverlight 4) 视图包含一个列表框,我的 ViewModel 将查找模型以检索列表框将绑定到的集合。

我的问题是这样的。我认为最好使用 ObservableCollection 来保存列表框绑定的项目。这将是 ViewModel 中的 ObseravleCollection。我应该在模型中也使用这种类型的集合,还是应该使用另一种集合类型并在模型和视图模型之间进行 smoe 转换?

【问题讨论】:

    标签: mvvm silverlight-4.0


    【解决方案1】:

    有 3 种基本场景(按照复杂度递增的顺序):

    1. 模型只是提供对后端服务的访问,根本不缓存流经它的数据
    2. model暴露了一个item的集合,vm没有自己的collection,然后view就简单的绑定到model object中的collection
    3. 模型暴露了一个数据源,虚拟机有自己的集合作为这个数据源的窗口,视图绑定到虚拟机中的集合。

    在第一种情况下,您将使用 List 将请求的数据简单地传递给 vms,在其他情况下,您将使用 ObservableCollection 以便通过绑定正确更新视图(案例 #2)或 vms 可以正确更新自己的集合(案例 #3)

    【讨论】:

      【解决方案2】:

      通常的做法是在模型中使用 IList/List 或类似的东西,然后在 ViewModel 中进行转换。所以在模型中你会有类似 IList 的东西,在 ViewModel 中你将它转换为 ObservableCollection(通常在 ViewModel 的构造函数中)。

      干杯,亚历克斯

      【讨论】:

      • 谢谢。您通常如何处理返回的更新。从 ViewModel 中捕获并添加到模型中?
      • 嗨,是的,如果您需要了解添加/删除到 ObservableCollection 的项目(例如通过用户交互)并且需要将这些更改传播到模型中,您可以处理 CollectionChanged 事件由 ObservableCollection 提供。
      • 您无法观察 IList/List。那么虚拟机应该如何知道 M 是否发生了变化呢?
      猜你喜欢
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      相关资源
      最近更新 更多