【发布时间】:2011-03-22 21:24:40
【问题描述】:
我正在使用 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 实现 can be used,但我不知道如何:Compare() 方法接收成对的详细信息项,而不管它们的分组如何,此时我无法确定小计。
有什么方法可以对这些组进行排序,而无需使它们本身成为实体(即在摘要级别有一个 CollectionView,在详细级别有另一个 CollectionView)?
【问题讨论】: