Wpf MVVM:ViewModel中的CollectionView还是xaml中的CollectionViewSource?
我正在使用MVVM模式开发一个WPF应用程序,我需要在ListView中显示一个项目列表(带有过滤),所选项目的字段显示在主/详细视图中。我在以下两种方法之间左右为难:Wpf MVVM:ViewModel中的CollectionView还是xaml中的CollectionViewSource?,wpf,collections,mvvm,Wpf,Collections,Mvvm,我正在使用MVVM模式开发一个WPF应用程序,我需要在ListView中显示一个项目列表(带有过滤),所选项目的字段显示在主/详细视图中。我在以下两种方法之间左右为难: 在我的ViewModel中公开CollectionView,并绑定到此 在我的ViewModel中公开普通IList,并使用CollectionViewSource在XAML中创建CollectionView 有没有一种公认的方法可以做到这一点?关于最好的方法有什么想法吗?我做的是前者(从VM中暴露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令人惊讶的是,很多时候你发现有人已经做了与你要问的完全相同的问题。谢谢!:)