Frage

In Anbetracht der folgenden Kategorien und Unterkategorien:

  1. Animationen (Family Guy, Calvin & Hobes, The Boondocks, Duck Tales, Looney Toons, Rosa & The Brain)
  2. Sesame Street (Oscar, Ernie & Bert, Kermit de Frosch, Elmo, Cookie Monster, Grover)

Ich bin auf der Suche nach einem Weg, es zu machen (dynamisch), um Zeilen und Spalten wie folgt:

----------------------------------------------------
| Animations                                       |
----------------------------------------------------
| Family Guy  | Calvin & Hobes | The Boondocks     |
----------------------------------------------------
| Duck Tales  | Looney Toons   | Pinky & The Brain |
----------------------------------------------------
| Sesame Street                                    |
----------------------------------------------------
| Oscar       | Ernie & Bert   | Kermit de Frog    |
----------------------------------------------------
| Elmo        | Cookie Monster | Grover            |
----------------------------------------------------

P / S:. Ich bin mir der Liste Kontrollen (Itemscontrol, DataGrid-, Listview etc.) und nicht von ihnen scheinen diese Kriterien zu erfüllen

War es hilfreich?

Lösung

Was müssen Sie tun, ist eine Abfrage erstellen, die irgendwie Gruppen Ihre Artikel nach Kategorien (entweder Sie bereits, dass haben oder Sie können Linq verwenden, um Ihre Hierarchie durch eine Gruppe von ... In Abfrage erstellen).

Dann können Sie eine Itemscontrol verwenden, die das Abfrageergebnis bindet, die Daten mit einem ItemTemplate Anzeigen eines Headers und andere Items enthält, die eine Itemspaneltemplate zu einem WrapPanel oder Uniform gesetzt hat.

Angenommen, Sie verwalten Ihre Daten in den folgenden Klassen zu bekommen (sorry, hier VB aber C # würde nicht weit sein aus, dass, wenn Sie es brauchen):

Public Class Category

    Private _Name As String
    Public Property CategoryName() As String
        Get
            Return _Name
        End Get
        Set(ByVal value As String)
            _Name = value
        End Set
    End Property

    Private _SubCategories As New List(Of SubCategory)
    Public Property SubCategories() As List(Of SubCategory)
        Get
            Return _SubCategories
        End Get
        Set(ByVal value As List(Of SubCategory))
            _SubCategories = value
        End Set
    End Property

End Class

Public Class SubCategory

    Private _Name As String
    Public Property SubCategoryName() As String
        Get
            Return _Name
        End Get
        Set(ByVal value As String)
            _Name = value
        End Set
    End Property

End Class



<ItemsControl ItemsSource="{Binding QueryResult}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Border BorderThickness="1"
                        BorderBrush="Black">

                    <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />                            
                    </Grid.RowDefinitions>
                        <Border BorderThickness="1"
                                BorderBrush="Black">
                            <TextBlock Margin="2"
                                       Text="{Binding CategoryName}" />
                        </Border>
                            <ItemsControl Grid.Row="1"
                                          ItemsSource="{Binding SubCategories}">
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <Border BorderThickness="1"
                                                BorderBrush="Black">

                                            <TextBlock Margin="2"
                                                       Text="{Binding SubCategoryName}" />
                                        </Border>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                                <ItemsControl.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <UniformGrid Columns="3" />
                                    </ItemsPanelTemplate>
                                </ItemsControl.ItemsPanel>
                            </ItemsControl>
                    </Grid>
                </Border>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

Dies ist eine sehr grobe Vorlage, werden Sie mit den Grenzen haben zu basteln zu bekommen, was Sie brauchen, aber das würde den Trick tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top