最近,我一直在尝试实现MVVM设计模式,但我遇到了两个我无法解决的问题:
我认为,我必须在 Model 类中使用 ObservableCollection ,以便将它传递到 ModelView 中查看。我希望我错了,因为 View 不得影响 Model 结构,我不应该局限于这种特定的集合类型。
有没有办法与值类型的项目列表进行双向绑定?
示例:
public ObservableCollection<bool> MyBooleans
{
get { return m_booleans; }
}
<ListView ItemsSource="{Binding MyBooleans}" ...>
<ItemTemplate>
...
<CheckBox IsChecked="{Binding}" ... />
...
</ItemTemplate>
</ListView>
答案 0 :(得分:8)
您的视图模型应该公开更改(即添加/删除项目)的集合为ObservableCollections
(或其他一些实现INotifyCollectionChanged
的类)。这样做不意味着您的模型需要公开实现此接口的集合。
您的视图模型实际上是模型上的适配器,使其更容易绑定。例如,如果您的应用程序显示推文,您的服务层可能会返回一个推文列表的模型。然后,您的视图模型会将这些插入到可观察的集合中,从而使您的视图得到更新。然后,您可以在将来的某个时间点(使用计时器)通过您的服务检索新推文,这些推文将再次作为列表返回。然后,您的视图模型会将这些推文添加到其ObservableCollection
,从而导致新视图在视图中可见。