この階層化、つまり「グループを持つ連絡先」を「各単一グループを持つ繰り返し連絡先」にフラット化すると、グループ化が機能します。
例えば
次のようなグループのアイテムが4つある場合...
Dog { mammal, quadruped }
Man { mammal, biped }
PrayingMantis { insect, quadruped }
Pegion { bird, biped }
次に、新しいフラットリストは次のようになります...
<mammal, Dog>
<mammal, Man>
<bird, Pigeon>
<insect, PrayingMantis>
<biped, Man>
<biped, Pigeon>
<quadruped, Dog>
<quadruped, PrayingMantis>
したがって、上記のグループ化を適用した後は、Keys
mammal { Dog, Man }
bird { Pigeon }
insect { PrayingMantis }
biped { Man, Pigeon }
quadruped { Dog, PrayingMantis }
C#コード:
//Flatten the groups into a KeyValuePair<string, Contacts> list using LINQ.
var flatGroups
= listGroups.SelectMany(
ctc => ctc.Groups.Select(
grp => new KeyValuePair<string, Contact>(grp, ctc))).ToList();
//Apply CollectionViewSource group on the `Key`.
var collectionVwSrc = new CollectionViewSource();
collectionVwSrc.Source = flatGroups;
collectionVwSrc.GroupDescriptions.Add(new PropertyGroupDescription("Key"));
//Apply groups as itemssource to the TreeView.
MyGroupsTree.ItemsSource = collectionVwSrc.View.Groups;
XAML
<TreeView x:Name="MyGroupsTree">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Items}">
<!--GroupItem.Name-->
<TextBlock Text="{Binding Path=Name}"
FontWeight="Bold"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<!--Contact.Name-->
<TextBlock Text="{Binding Value.Name}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
これが役立つかどうか教えてください...