Is it Possible to Nest Collections within Collections using Wpf DataGrid?

北城余情 提交于 2019-12-22 11:28:36

问题


I want a simple sample program that nests collections within collections using Wpf DataGrid.


回答1:


Here's an implementation using VB.Net codebehind. Code is needed only to create test data.

Class MainWindow 

Public Property cs As New List(Of c1)

Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    For i1 = 1 To 3
        Dim c1 = New c1
        cs.Add(c1)
        c1.c1text = i1
        For i2 = 1 To 3
            Dim c2 = New c2
            c1.c1col.Add(c2)
            c2.c2text = i1 & i2
            For i3 = 1 To 3
                Dim c3 = New c3
                c2.c2col.Add(c3)
                c3.c3text = i1 & i2 & i3
                For i4 = 1 To 3
                    Dim c4 = New c4
                    c3.c3col.Add(c4)
                    c4.c4text = i1 & i2 & i3 & i4
                    For i5 = 1 To 3
                        c4.c4col.Add(i1 & i2 & i3 & i4 & i5)
                    Next
                Next
            Next
        Next
    Next
    DataGrid1.ItemsSource = cs
End Sub

End Class

Public Class c1
    Public Property c1text As String
    Public Property c1col As New List(Of c2)
End Class

Public Class c2
    Public Property c2text As String
    Public Property c2col As New List(Of c3)
End Class

Public Class c3
    Public Property c3text As String
    Public Property c3col As New List(Of c4)
End Class

Public Class c4
    Public Property c4text As String
    Public Property c4col As New List(Of String)
End Class

Here's the Xaml:

<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">

<Grid>
    <DataGrid Name="DataGrid1" IsReadOnly="True" AutoGenerateColumns="False" >
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding c1text}" />
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <DataGrid Name="DataGrid2" ItemsSource="{Binding c1col}" IsReadOnly="True" AutoGenerateColumns="False">
                            <DataGrid.Columns>
                                <DataGridTextColumn Binding="{Binding c2text}" />
                                <DataGridTemplateColumn>
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <DataGrid Name="DataGrid3" ItemsSource="{Binding c2col}" IsReadOnly="True" AutoGenerateColumns="False">
                                                <DataGrid.Columns>
                                                    <DataGridTextColumn Binding="{Binding c3text}" />
                                                    <DataGridTemplateColumn>
                                                        <DataGridTemplateColumn.CellTemplate>
                                                            <DataTemplate>
                                                                <DataGrid Name="DataGrid4" ItemsSource="{Binding c3col}" IsReadOnly="True" AutoGenerateColumns="False">
                                                                    <DataGrid.Columns>
                                                                        <DataGridTextColumn Binding="{Binding c4text}" />
                                                                        <DataGridTemplateColumn>
                                                                            <DataGridTemplateColumn.CellTemplate>
                                                                                <DataTemplate>
                                                                                    <DataGrid Name="DataGrid5" ItemsSource="{Binding c4col}" IsReadOnly="True" AutoGenerateColumns="False">
                                                                                        <DataGrid.Columns>
                                                                                            <DataGridTextColumn Binding="{Binding}" />
                                                                                        </DataGrid.Columns>
                                                                                    </DataGrid>
                                                                                </DataTemplate>
                                                                            </DataGridTemplateColumn.CellTemplate>
                                                                        </DataGridTemplateColumn>
                                                                    </DataGrid.Columns>
                                                                </DataGrid>
                                                            </DataTemplate>
                                                        </DataGridTemplateColumn.CellTemplate>
                                                    </DataGridTemplateColumn>
                                                </DataGrid.Columns>
                                            </DataGrid>
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>
                            </DataGrid.Columns>
                        </DataGrid>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>



来源:https://stackoverflow.com/questions/3780483/is-it-possible-to-nest-collections-within-collections-using-wpf-datagrid

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!