0
我有一個名爲「Items」的基礎ObservableCollection,它可以通過它的抽象父對象擁有兩種類型的實例(peopleVM,messageVM)。如何爲每種類型應用不同的排序說明?具有更多數據類型的CollectionView排序集合
這是我的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
它產生的情侶BindingExpression在VS的輸出,因爲PeopleVM沒有財產的DateTime等等...
我需要這樣的:
--header peoples- //按名稱升序
人1
人2
--header messages-- //按消息日期排序
消息1
消息2
消息3
你是說集合將同時包含這兩種類型的實例,或者有時它是全部的,有時是所有其他的? –
是的,兩種類型一起,具有不同的DataTemplates ...這是如何解決我所知道的這個問題的唯一方法。 –
正確的是,不同的DataTemplates是正確的。但是你不能爲每種類型提供不同的排序描述。一種選擇是使用這兩個類的屬性的聯合集編寫一個接口,並讓它們都實現它。每個類都會爲不支持的屬性返回常量 - 比如messageVM中有一個date屬性,而不是在peopleVM中;如果用戶按日期排序,peopleVM會返回'DateTime.MaxValue'來將它們放在排序順序的末尾。 –