Wpf 我的ViewModel应该有一个可观察的视图集合还是ViewModel?

Wpf 我的ViewModel应该有一个可观察的视图集合还是ViewModel?,wpf,mvvm,observablecollection,itemscontrol,Wpf,Mvvm,Observablecollection,Itemscontrol,我试图通过在ViewModel上通过DataTemplates将其绑定到ObservableCollections来理解使用ItemsControl时的基本MVVM设计方法 我看到过绑定到字符串、视图和视图模型的可见集合的示例 绑定到字符串似乎只适用于演示,而WPF的威力似乎真正体现在绑定到“包含视图集合的ViewModels(包含ViewModels集合)”上 对于那些精通MVVM模式的用户,您将ItemsControl、ListView、ListBox绑定到ViewModel中集合的标准方法

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

我看到过绑定到字符串视图视图模型的可见集合的示例

绑定到字符串似乎只适用于演示,而WPF的威力似乎真正体现在绑定到“包含视图集合的ViewModels(包含ViewModels集合)”上

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

  • 始终使用ObservableCollection,从不列出,因为
  • 比ItemsControl更好的显示集合的方法是
  • 为了使过滤在ViewModel中工作而不是代码隐藏,请使用
  • 在以下情况下使用视图集合。。。和ViewModels的集合时
  • 90%的时间我创建一个ItemsControl并将其绑定到一个ObservableCollection视图,这些视图有自己的ViewModels

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

出于以下原因,我将使用ViewModels的ObservableCollection:

  • ObservableCollection在被修改时(例如,在集合中添加/删除项时)已具有可用于发送信号的事件
  • 我们位于ViewModel的“层”,因此它提供了更清晰的分离,使ViewModel包含ViewModel的集合而不是视图
  • 如果需要修改集合中的项或从中获取数据,则如果这些项是ViewModels(如果它们是视图,则通常会强制转换视图的DataContext或访问其UI元素),则可以更轻松地修改/访问这些数据

    • 我有同样的问题,但将“视图”替换为“模型”。)

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

      如果您有一个viewmodels的ObservableCollection(而不是视图),那么在DataTemplate中使用该XAML和将该XAML作为视图的.XAML文件有什么区别?是,活动是最好的方式。考虑使用弱事件模式的安全性。+ 1,这绝对是要走的路。您的viewmodel具有viewmodels集合,并且视图的资源集合具有每个viewmodels的数据模板。