2010-01-07 5 views

Antwort

5

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.

0

Die Steuerung unterstützt Datenraster Gruppierung.

Tim Heuer hat einen guten Blog zum Gruppieren mit einem Datagrid. link text

+0

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. –

0

Vielleicht die Kontrolle, die Sie wirklich suchen, ist die Accordian Control aus der Toolkit.

Siehe Beispiel von Accordian Verhalten here.

Beachten Sie, dass das tatsächliche Aussehen so stilsicher ist wie jedes andere Steuerelement. Die grundlegende Funktion besteht darin, Kategorien von Elementen zu gruppieren, die ansonsten eine einfache Liste wären.

+0

Danke, ich werde es mir ansehen.Ich bin mir nicht sicher, ob dies die Gruppierung von einer Domain-Datenquelle unterstützt. Ich brauche auch mehr als 1 Gruppierungsstufe. –

+0

Hmm .. Ich sehe von dir Kommentar zu Stephen deine wahre Anforderung und Frage ist irgendwie offenbart. Es ist nicht klar, wie genau die Idee des "Gruppierens" mit einem "Wrappanel" -Stil-Layout kompatibel ist. Ich schlage vor, dass Sie Ihren Fragezustand kategorisch bearbeiten, was die tatsächliche UI wirklich erreichen soll. – AnthonyWJones

+0

@ AnthonyWJones- Ich habe ein Bild von dem, was ich erstellen möchte, hinzugefügt. Ich suchte nach einem Steuerelement, um dies mithilfe von Datenbindung zu tun, aber es sieht so aus, als würde ich nur etwas Code schreiben müssen, um die Benutzeroberfläche manuell zu erstellen. –