我正在使用 CollectionViewSource 的分组来显示详细信息集合的虚拟“聚合”视图;基本上是这里看到的示例:ListBox Grouping, Sorting, Subtotals and Collapsible Regions
总结示例的相关部分,您的分组可以通过 ValueConverter 从其详细信息中公开聚合属性,如下所示:
<ListBox.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Grid>
<!--[..Snip..]-->
<TextBlock Grid.Column="4"
Text="{Binding StringFormat=\{0:C\},
Converter={StaticResource groupItemSalesSubtotalConverter}}"
TextAlignment="Right" />
<!--[..Snip..]-->
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ListBox.GroupStyle>
请注意,上面的 TextBlock 直接绑定到 GroupItem 的绑定,因此转换器接收整个CollectionViewGroup
及其子项,并且可以深入了解详细信息以汇总组中项目的小计。
问题是,由于这个值本身不是一个属性,是否可以按小计对组进行排序?
这显然不能由SortDescription
. 我已经看到有关 ListCollectionView 的CustomSort
属性的建议,它需要一个IComparer
实现,可以在这样的情况下使用,但我不明白如何:该Compare()
方法接收成对的细节项,无论它们的分组如何,我无法确定小计那一点。
有什么方法可以对这些组进行排序,而无需使它们本身成为实体(即在摘要级别有一个 CollectionView,在详细级别有另一个 CollectionView)?