简单的问题,除了答案似乎不存在的事实。我已经为CollectionViewSource创建了一个自定义排序方法,它按照特定的顺序将集合分组。现在我想做的是按字母顺序对这些组中的项目进行排序,而不改变组本身的顺序。
我知道使用SortDescriptions
,最初按属性名称排序,然后按另一个属性名称的另一个SortDescrpiton排序,将项目分组,然后对所述组中的项目进行排序。但我无法找到自定义排序方法的这种实现。 (注意:SortDescriptions不允许自定义排序逻辑,这是我需要的)
我尝试创建两个排序方法,一个用于按组排序,另一个按字母顺序在组内排序,但第二个排序方法由于某种原因接收到未组合和未排序的原始项目列表。
CollectionViewSource的XAML:
<CollectionViewSource x:Key="typeFacetsByCategory" Source="{Binding Values}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Category" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
代码隐藏:
private void CustomFacetSort(object sender, RoutedEventArgs e)
{
var fe = sender as FrameworkElement;
if (fe == null)
return;
var ic = (ItemsControl)fe;
var collection = (ListCollectionView)ic.ItemsSource;
collection.CustomSort = new SortCategories();
collection.CustomSort = new SortCategoriesInner();
}
理想情况下,第二种排序方法&#34; SortCategoriesInner&#34;将按字母顺序对已排序的列表进行排序。含义SortCategories
将按名为Category
的属性对集合进行排序,然后SortCategoriesInner
将按字母顺序对已排序集合中的每个项目进行排序(使用属性Name
)。但是,SortCategoriesInner
在分配时会收到未排序的原始列表。在将SortCategories
指定为集合CustomSort
后检查集合时,集合确实按Category
正确排序。但是,当我使用SortCategoriesInner
之后立即对集合进行排序时,列表将完全重置为第一次排序之前的内容(不再按Category
排序)。
我尝试手动进入商品收藏组,并按字母顺序排列每组中的商品,但它们只读,因此无法正常使用。