我的ViewModel应该有一个ObservableCollection视图还是ViewModels?

时间:2009-06-08 12:45:05

标签: wpf mvvm observablecollection itemscontrol

在使用 ItemsControl 时,我试图通过 DataTemplates 将其绑定到ViewModel上的 ObservableCollections 来了解基本的MVVM设计方法。< / p>

我见过绑定到字符串视图 ViewModels 的ObservableCollections的示例。

绑定到字符串似乎仅适用于演示,它是绑定到“包含ViewModel集合的ViewModels包含ViewModel集合”的WPF的强大功能似乎真的出来了。

对于那些精通MVVM模式的人来说,将ItemControl,ListView,ListBox绑定到ViewModel中的集合的标准方法是什么?我正在寻找以下经验的建议:< / p>

  • 始终使用ObservableCollection&lt; ...&gt;并且永远不会列出&lt; ...&gt;因为...
  • 比ItemsControl更好的东西是显示集合......
  • 为了让过滤在ViewModel中工作而不是代码隐藏,请使用...
  • 使用View的集合......以及ViewModel的集合......
  • 我有90%的时间创建ItemsControl并将其绑定到具有自己的ViewModel的ObservableCollection视图...

3 个答案:

答案 0 :(得分:10)

我会使用ViewModel的ObservableCollection,原因如下:

  • ObservableCollection已经有可用于在修改时发出信号的事件(例如,当从集合中添加/删除项目时)。
  • 我们在ViewModel'层',因此它提供了更清晰的分离,使ViewModel包含ViewModel而不是Views
  • 的集合
  • 如果需要修改或从集合中的项目获取数据,如果项目是ViewModel,则可以更轻松地修改/访问该数据(如果它们是视图,您将经常投射View的DataContext或访问其UI元件)。

答案 1 :(得分:1)

我喜欢使用ViewModels的ObservableCollection。绑定到集合的视图可以定义一个DataTemplate,为ViewModel提供外观。这导致组件之间的耦合较少。

答案 2 :(得分:1)

我有同样的问题,但用“模型”替换“视图”。 :)

我有一个带有其他模型集合的MODEL。 我希望我的viewmodel有一个可观察的其他视图模型集合,但是一旦我像这样实例化它 - 模型集合内容之间的连接就会丢失。 我现在需要开始将viewmodels observable集合中的所有事件连接回模型集合吗?