Wpf MVVM:ViewModel中的CollectionView还是xaml中的CollectionViewSource?

Wpf MVVM:ViewModel中的CollectionView还是xaml中的CollectionViewSource?,wpf,collections,mvvm,Wpf,Collections,Mvvm,我正在使用MVVM模式开发一个WPF应用程序,我需要在ListView中显示一个项目列表(带有过滤),所选项目的字段显示在主/详细视图中。我在以下两种方法之间左右为难: 在我的ViewModel中公开CollectionView,并绑定到此 在我的ViewModel中公开普通IList,并使用CollectionViewSource在XAML中创建CollectionView 有没有一种公认的方法可以做到这一点?关于最好的方法有什么想法吗?我做的是前者(从VM中暴露CollectionView)

我正在使用MVVM模式开发一个WPF应用程序,我需要在ListView中显示一个项目列表(带有过滤),所选项目的字段显示在主/详细视图中。我在以下两种方法之间左右为难:

  • 在我的ViewModel中公开CollectionView,并绑定到此
  • 在我的ViewModel中公开普通IList,并使用CollectionViewSource在XAML中创建CollectionView

  • 有没有一种公认的方法可以做到这一点?关于最好的方法有什么想法吗?

    我做的是前者(从VM中暴露
    CollectionView
    ),但真正重要的是过滤逻辑在哪里。即使视图必须将
    CollectionViewSource
    连接到虚拟机,也应该在虚拟机中进行测试。也就是说,我不认为从你的虚拟机上公开CollectionView有什么特别讨厌或反MVVM的地方。

    我知道我回答你的问题有点晚了,但我今天才看到

    我创建了使用CollectionViewSource的master/detail视图模型,并在博客中对此进行了介绍

    我在这里介绍了主/明细表的viewmodel,它使用:

    您还可以在我的博客页面上找到observablecollection类的viewmodel


    也许你会发现它对你有用。

    同意虚拟机中的Kent、def,以便对其进行测试。标记是否仅在ViewModel中创建新的CollectionView?MSDN for CollectionView表示不应创建新的CollectionView,而应创建CollectionViewSource并获取默认视图。创建CollectionView的最佳方法是什么?+1。如果有人感兴趣,《Microsoft PRISM开发人员指南》建议在第79页上使用相同的方法。我不喜欢WindowsBase和PresentationFrameworkRok dll应该在本方案中从ViewModels dll中引用,是否有任何方法可以在不引用此dll的情况下公开视图?为了避免从ViewModel中引用WPF dll,
    ICollectionView
    界面(
    System.ComponentModel
    )可以在不使用
    WindowsBase
    PresentationFramework.dll的情况下使用。要从您的
    ObservableCollection
    创建
    ICollectionView
    ,请使用
    myCollectionView=CollectionViewSource.GetDefaultView(myObservableCollection)
    ,然后在XAML中设置绑定,
    @ArsenMkrtchyanIt令人惊讶的是,很多时候你发现有人已经做了与你要问的完全相同的问题。谢谢!:)