带有列表的MVVM模型?

时间:2011-03-05 05:15:19

标签: silverlight mvvm

我有一个silverlight wp7应用程序,我正在应用MVVM模式。该模型包含一个类列表(类类型封装了股票行情数据),该列表在View中使用,还有一个Item模板。

我的理解是,为了使List能够与Binding一起使用,它需要是一个可观察的集合(提升PropertyChanged事件似乎什么都不做)。

因此,如何在我的模型与表示不相关的模型与需要可观察集合的视图之间保持解耦?

目前,在我的View-Model中,我使用model.List中的数据动态创建一个可观察的集合。这看起来像是一块垃圾。

2 个答案:

答案 0 :(得分:3)

只有两种方法可以解决这个问题:

  1. 让模型公开ObservableCollection本身。这意味着您的ViewModel中不需要任何kludge,但您可能会说这只是将问题转移到其他地方。

  2. 让ViewModel公开它自己创建的ObservableCollection,就像现在一样。如果可以更新集合(在您的方案中看起来不像),ViewModel还需要“获取”模型的所有权并将更改传播回List

    < / LI>

    我不相信你做的是一个kludge。模型绝对与演示文稿(View)完全分离,因为ViewModel需要尽一切努力使事情发挥作用。这完全符合MVVM的精神。

答案 1 :(得分:1)

我同意它不是一个kludge,实际上,让你的模型公开一个可观察的集合,是最好的解决方案,特别是如果你要从外部来源更新它。

您的另外两个选项是使用来自任何源的中继命令,可以更新列表以告知它需要重新同步的viewmodel,或者在viewmodel中将处理程序添加到列表的itemadded事件中,然后将该项添加到您的你的虚拟现实中的可观察集合。