CollectionView用更多的数据类型排序集合

本文关键字:数据类型 排序 集合 CollectionView | 更新日期: 2023-09-27 18:09:41

我有一个名为"Items"的底层ObservableCollection,它可以通过其抽象父类保存两种类型(peopleVM, messageVM)的实例。如何为每种类型应用不同的排序描述?

这是我的CollectionViewSource:

var cvs = CollectionViewSource.GetDefaultView(Items);
PropertyGroupDescription groupDescriptionMessages = new PropertyGroupDescription(nameof(ISearchedItem.ItemType)); // Group by item type - peoples | messages
cvs.GroupDescriptions.Add(groupDescriptionMessages);
cvs.SortDescriptions.Add(new SortDescription(nameof(ISearchedItem.ItemType), ListSortDirection.Descending)); // Primary sort by Item type - peoples | messages
cvs.SortDescriptions.Add(new SortDescription(nameof(PeopleVM.ContactName), ListSortDirection.Ascending)); // Sort peoples by name
cvs.SortDescriptions.Add(new SortDescription(nameof(MessageVM.DateTime), ListSortDirection.Descending)); // Sort messages by date time

由于PeopleVM没有属性DateTime等,它正在VS输出中生成一对BindingExpression…

我需要这样写:

——Header peoples-//按名称升序排序
人1
人2

——报头消息——//按消息日期排序
消息1
消息2
消息3

CollectionView用更多的数据类型排序集合

我最终使用标准的SortDescription:

cvs.SortDescriptions.Add(new SortDescription(nameof(ISearchedItem.ContactName), ListSortDirection.Ascending)); // Sort peoples by name
cvs.SortDescriptions.Add(new SortDescription(nameof(ISearchedItem.DateTime), ListSortDirection.Descending)); // Sort messages by date time

这意味着我必须添加getter属性到ISearchedItem的实现中,仅用于排序目的,这些属性返回null | DateTime。MaxValue来摆脱BindingExpression错误,对我来说似乎很丑,但还没有找到更好的解决方案。