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

时间:2012-02-07 17:01:14

标签: c# wpf list mvvm observablecollection

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

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

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

  3. 示例:

    public ObservableCollection<bool> MyBooleans
    {
        get { return m_booleans; }
    }
    
    <ListView ItemsSource="{Binding MyBooleans}" ...>
        <ItemTemplate>
            ...
            <CheckBox IsChecked="{Binding}" ... />
            ...
        </ItemTemplate>
    </ListView>
    

1 个答案:

答案 0 :(得分:8)

您的视图模型应该公开更改(即添加/删除项目)的集合为ObservableCollections(或其他一些实现INotifyCollectionChanged的类)。这样做意味着您的模型需要公开实现此接口的集合。

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