Mvvm 我应该在M-V-VM的模型中使用ObservableCollections吗

Mvvm 我应该在M-V-VM的模型中使用ObservableCollections吗,mvvm,silverlight-4.0,Mvvm,Silverlight 4.0,我对m-V-VM完全陌生,对Silverlight也很陌生,今天我才第一次读到它。作为示例,我正在创建一个包含项目列表的模型。My(Silverlight 4)视图包含一个列表框,My ViewModel将查看该模型以检索列表框将绑定到的集合 我的问题是。我认为最好使用ObservableCollection来保存listbox绑定到的项。这将是ViewModel中的ObseravleCollection。我应该在模型中也使用这种类型的集合,还是应该使用另一种集合类型并在模型和viewmodel

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


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

通常的方法是在模型中使用IList/List或类似的方法,然后在viewmodel中进行转换。因此,在模型中,您将有类似IList的内容,在ViewModel中,您将其转换为ObservableCollection(通常在ViewModel的构造函数中)


干杯,Alex

通常的方法是在模型中使用IList/List或类似的工具,然后在ViewModel中进行转换。因此,在模型中,您将有类似IList的内容,在ViewModel中,您将其转换为ObservableCollection(通常在ViewModel的构造函数中)


干杯,Alex有3种基本场景(按复杂性增加的顺序):

  • 该模型只提供对后端服务的访问,根本不缓存流经它的数据
  • 模型公开了一个项目集合,虚拟机没有自己的集合,然后视图被简单地绑定到模型对象中的集合
  • 模型公开了一个数据源,虚拟机有自己的集合作为进入该数据源的窗口,视图绑定到虚拟机中的集合
    在第一种情况下,您可以使用List将请求的数据简单地传递给VM,在其他情况下,您可以使用ObservableCollection,以便通过绑定(case#2)正确地更新视图,或者VM可以正确地更新自己的集合(case#3)

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

  • 该模型只提供对后端服务的访问,根本不缓存流经它的数据
  • 模型公开了一个项目集合,虚拟机没有自己的集合,然后视图被简单地绑定到模型对象中的集合
  • 模型公开了一个数据源,虚拟机有自己的集合作为进入该数据源的窗口,视图绑定到虚拟机中的集合
    在第一种情况下,您可以使用List将请求的数据简单地传递给VM,在其他情况下,您可以使用ObservableCollection,以便通过绑定(case#2)正确更新视图,或者VM可以正确更新自己的集合(case#3)

    谢谢。您通常如何处理返回的更新。从ViewModel捕获并添加到模型中?您好,是的,如果您需要了解正在添加到ObservaleCollection中/从ObservaleCollection中删除的项目(例如通过用户交互),并且需要将这些更改传播到模型中,您可以处理ObservaleCollection提供的CollectionChanged事件来执行此操作。您无法观察IList/列表。那么虚拟机应该如何知道M是否发生了变化呢?谢谢。您通常如何处理返回的更新。从ViewModel捕获并添加到模型中?您好,是的,如果您需要了解正在添加到ObservaleCollection中/从ObservaleCollection中删除的项目(例如通过用户交互),并且需要将这些更改传播到模型中,您可以处理ObservaleCollection提供的CollectionChanged事件来执行此操作。您无法观察IList/列表。那么,虚拟机应该如何知道M是否发生了变化?