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
。実装CustomSort
を取る ListCollectionView のプロパティをこのような状況で使用できるという提案を見てきましたが、方法がわかりません。メソッドは、グループ化に関係なく、詳細項目のペアを受け取ります。その点。IComparer
Compare()
これらのグループを独自のエンティティにする必要なく、これらのグループを並べ替える方法はありますか (つまり、概要レベルで CollectionView を持ち、詳細レベルで別の CollectionView を持つ)。