视图模型公开的集合必须使用MVVM模式实现ObservableCollection <T>

0 c# wpf list observablecollection mvvm

最近,我一直在尝试实现MVVM设计模式,但我遇到了两个我无法解决的问题:

  1. 在我看来,我必须在我的Model类中使用ObservableCollection,以便将它在ModelView中传递给View.我希望我错了,因为View不能影响Model结构,我不应该局限于这个特定的集合类型.

  2. 有没有办法用值类型项目列表进行双向绑定?

例:

public ObservableCollection<bool> MyBooleans
{
    get { return m_booleans; }
}
Run Code Online (Sandbox Code Playgroud)
<ListView ItemsSource="{Binding MyBooleans}" ...>
    <ItemTemplate>
        ...
        <CheckBox IsChecked="{Binding}" ... />
        ...
    </ItemTemplate>
</ListView>
Run Code Online (Sandbox Code Playgroud)

Col*_*inE 8

您的视图模型应该公开更改的集合(即添加/删除项目)ObservableCollections(或实现的其他类INotifyCollectionChanged).但这并不意味着你的模型需要实现该接口暴露集合.

您的视图模型实际上是模型上的适配器,使其更容易绑定.例如,如果您的应用程序显示推文,您的服务层可能会返回一个推文列表的模型.然后,您的视图模型会将这些插入到可观察的集合中,从而使您的视图得到更新.然后,您可以在将来的某个时间点(使用计时器)通过您的服务检索新推文,这些推文将再次作为列表返回.然后,您的视图模型会将这些推文添加到其中,ObservableCollection从而导致新项目在视图中可见.