11

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

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

绑定到字符串似乎只适用于演示,它是对“包含 ViewModels 集合的 ViewModels的绑定”,WPF 的强大功能似乎真正发挥了作用。

对于那些精通 MVVM 模式的用户,您将 ItemsControl、ListView、ListBox 绑定到 ViewModel 中的集合的标准方法是什么?我正在从这样的经验中寻求建议:

  • 始终使用 ObservableCollection<...> 而从不使用 List<...> 因为...
  • 比 ItemsControl 显示集合更好的东西是......
  • 为了让过滤在您的 ViewModel 中而不是在代码隐藏中工作,请使用...
  • 在...时使用视图集合,在...时使用 ViewModel 集合
  • 90% 的时间我创建了一个 ItemsControl 并将它绑定到一个 ObservableCollection 的 Views 中,这些 Views 有自己的 ViewModels...
4

3 回答 3

10

出于以下原因,我会使用 ViewModel 的 ObservableCollection:

  • 当 ObservableCollection 被修改时(例如,当从集合中添加/删除项目时),ObservableCollection 已经有可用于发送信号的事件。
  • 我们位于 ViewModel 的“层”,因此它提供了更清晰的分离,让 ViewModel 包含 ViewModel 的集合而不是 View
  • 如果需要从集合中的项目修改或获取数据,如果项目是 ViewModel,您可以更轻松地修改/访问该数据(如果它们是视图,您将经常转换视图的 DataContext 或访问其 UI 元素)。
于 2009-06-10T19:12:31.790 回答
1

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

于 2009-06-08T14:53:11.800 回答
1

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

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

于 2009-06-30T09:53:22.937 回答