Sie können dies tun, indem verschachtelte ItemsControls
an ein PagedCollectionView gebunden werden.
Angenommen, ich habe eine Datenquelle - MyItems
- mit Feldern: Category
, Section
und Option
. Ich kann ein PagedCollectionView
von einem IEnumerable(of MyItems)
erstellen und ihm mitteilen, welche Felder gruppiert werden sollen.
Dim original As IEnumerable(Of MyItems) = GetMyItems()
Dim pcv = New PagedCollectionView(original)
pcv.GroupDescriptions.Add(New PropertyGroupDescription("Category"))
pcv.GroupDescriptions.Add(New PropertyGroupDescription("Section"))
Dann band ich meine ersten ItemsControl
zum PagedCollectionView
hisMyItems.ItemsSource = pcv.Groups
Die PCV
eine verschachtelten Hierarchie erzeugt wie:
-Name
-Items
wo Name
der Wert in dem gruppierten Feld ist und Items
enthält die Zeilen/Objekte in dieser Gruppierung. Ich denke, Sie könnten auch die PCV in Xaml erstellen, wenn Sie bevorzugen.
XAML würde in etwa so aussehen:
<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>
Ich hoffe, das macht Sinn. Ich habe versucht, Dinge von meiner tatsächlichen App zu vereinfachen, aber ich könnte einige Fehler gemacht haben, es zu kopieren. Natürlich können Sie auch normale ItemsControls oder andere Steuerelemente verwenden und mit Vorlagen usw. anpassen.
Ja, ich weiß, aber das Datagrid ist nicht wirklich geeignet für das, was ich will. Ich möchte ein einzelnes Steuerelement (z. B. Button) für jede Zeile anzeigen, aber diese müssen horizontal und nicht vertikal umbrechen. So können Sie im ItemsControl das ItemsPanel so formatieren, dass es ein Wrappel verwendet, aber ich sehe keine Möglichkeit, dies im Datagrid zu tun. –