Поскольку вам нужна иерархия, лучшим подходом на мой взгляд будет TreeView .Вы должны заранее сгруппировать данные в нужной вам иерархии, затем вы можете привязать данные дерева к элементам верхнего уровня в вашем источнике данных, в вашем случае элементам «Группировать».
Для элементов, которые имеюттакже дочерние элементы, вам нужно добавить HierarchicalDataTemplate
в древовидную структуру - важно, чтобы любой объект, из которого вы рисуете свои элементы, должен поддерживать свойство, содержащее коллекцию дочерних элементов, это настраивается в атрибуте ItemsSource
.
Для элементов, которые не имеют дочерних элементов (элементы "item" в вашем примере), вы можете добавить обычный DataTemplate
.
В итоге XAML в виде дерева может выглядеть примерно так:
<TreeView Name="myTreeView" ItemsSource="{Binding}" >
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type GroupType}" ItemsSource="{Binding Items}">
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type ItemType}">
</DataTemplate>
</TreeView.Resources>
</TreeView>
Чтобы назначить узлы верхнего уровня после создания соответствующих объектов данных (каждому из которых, в свою очередь, назначается коллекция дочерних элементов), вы можете просто сказать:
foreach(GroupType myGroup in myGroupCollection)
myTreeView.Items.Add(myGroup);