Usted puede hacer esto mediante el uso anidado ItemsControls
unido a un PagedCollectionView.
Supongo que tengo un origen de datos - MyItems
- con campos: Category
, Section
y Option
. Puedo crear un PagedCollectionView
desde un IEnumerable(of MyItems)
y decirle qué campos agrupar.
Dim original As IEnumerable(Of MyItems) = GetMyItems()
Dim pcv = New PagedCollectionView(original)
pcv.GroupDescriptions.Add(New PropertyGroupDescription("Category"))
pcv.GroupDescriptions.Add(New PropertyGroupDescription("Section"))
Entonces se me trabó la primera ItemsControl
a la PagedCollectionView
hisMyItems.ItemsSource = pcv.Groups
El PCV
crea una jerarquía anidada como:
-Name
-Items
donde Name
es el valor en el campo agrupado y Items
contiene las filas/objetos en esa agrupación. Supongo que también puedes crear PCV en xaml si lo prefieres.
el XAML sería algo como:
<controls:HeaderedItemsControl x:Name="hisMyItems" Header="{Binding Name}" ItemsSource="{Binding Items}" >
<controls:HeaderedItemsControl.ItemTemplate>
<DataTemplate>
<controls:HeaderedItemsControl Header="{Binding Name}" ItemsSource="{Binding Items}" ItemsPanel="{StaticResource ItemsPanelTemplate1}" >
<controls:HeaderedItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Option}" />
</DataTemplate>
</controls:HeaderedItemsControl.ItemTemplate>
</controls:HeaderedItemsControl>
</DataTemplate>
</controls:HeaderedItemsControl.ItemTemplate>
</controls:HeaderedItemsControl>
espero que tenga sentido. Intenté simplificar las cosas de mi aplicación real, pero podría haber cometido algunos errores al copiarla. Obviamente, también podría usar los controles de elementos normales u otros controles y personalizarlos con plantillas, etc.
Sí, lo sé, pero la cuadrícula de datos no es realmente adecuada para lo que deseo. Quiero mostrar un solo control (por ejemplo, Botón) para cada fila, pero estos deben envolver horizontalmente en lugar de verticalmente. Por lo tanto, en ItemsControl puede diseñar el Panel de elementos para usar un panel de distribución pero no veo una manera de hacerlo en la cuadrícula de datos. –