Any idea on how to sort a CompositeCollection?

2019-07-29 18:17发布

I have a CompositeCollection that consists of ObservableCollections of two types: Companies and Contacts. Contact has a property FullName while Company has a property Name.

I want to apply sorting so the collections are mixed by their types but sorted by their name, example:

Itzhak Perlman
John Doe
Microsoft
Sarah Moore
StackOverflow
Walter Richardson

Note that I bound the ItemsControl to a CollectionViewSource that its Source is set the CompositeCollection, it's view becomes a CompositeCollectionView, it's an internal type, if I explicitly set its type to ListCollectionView, it only contains the CollectionContainers as its items.

Desired solution is a workaround to enable sorting, filtering and grouping on a CompositeCollections, I don't care to override and create my own CompositeCollection, I just don't know how I can override this and enable its functionality in xaml.

2条回答
Luminary・发光体
2楼-- · 2019-07-29 19:01

Who said I must get advantage of the thingy called 'CompositeCollection'?
I decided not to use a CompositeCollection.
I am just creating an ObservableCollection(of Object) mixed of the two types, and binding the CollectionViewSource to it.

Update

By inheriting CompositeCollection and implenting IBindingList, sorting can be enabled.

查看更多
We Are One
3楼-- · 2019-07-29 19:12

One can make use of IComparable and a interface for the object to be added into the collection. Then one can sort by

 IComparable getName()  // this should return company/employee name

in the compare method you can sort as per your requirement

查看更多
登录 后发表回答