wpf grid with dynamic columns

后端 未结 4 1881
轻奢々
轻奢々 2020-12-10 07:03

I have a collection that I wish to bind to a WPF grid.

The problem I\'m facing is that the number of columns is dynamic and is dependent on a collection. Here is a

相关标签:
4条回答
  • 2020-12-10 07:22

    Using a grid approach might make things more complicated than they should be. Have you tried changing the template of a listview, or to use the DataGrid instead for this purpose?

    For an example, take a look at this project: http://www.codeproject.com/Articles/25058/ListView-Layout-Manager

    Or this one: http://www.codeproject.com/Articles/16009/A-Much-Easier-to-Use-ListView

    If you go with the Grid, I believe you'll have to add a lot of code behind to manage the amount of columns and rows, their size, the cell content... Whereas a ListView/DataGrid will let you do this dynamically through Templates.

    0 讨论(0)
  • 2020-12-10 07:37

    Create a Grid using code as shown at http://msdn.microsoft.com/en-us/library/system.windows.controls.grid(v=vs.90).aspx#feedback

    create a property of type ColumnDefinition,( and use property changed ) to create columns.

    0 讨论(0)
  • 2020-12-10 07:39

    You can use nested ItemsControls for this

    Here's a basic example:

    <!-- Bind Rows using the default StackPanel for the ItemsPanel -->
    <ItemsControl ItemsSource="{Binding Rows}">
        <!-- Set the Template for each row to a TextBlock and another ItemsControl -->
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <!-- Need to set Width of name TextBlock so items line up correctly -->
                    <TextBlock Width="200" Text="{Binding Name}" />
    
                    <ItemsControl ItemsSource="{Binding Columns}">
                        <!-- Use a horizontal StackPanel to display columns -->
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <StackPanel Orientation="Horizontal" />
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                    </ItemsControl>
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    
    0 讨论(0)
  • 2020-12-10 07:40

    There is also the option of using a dynamic object to create your columns. This is a bit laborious but the results are very effective and the solution in general is quite flexible.

    This will show you the basics to the dynamic object Binding DynamicObject to a DataGrid with automatic column generation?

    I had some trouble using it with nested objects, columns that have objects and then trying to bind cell content to the object.

    Here's a question I raised with an example of how to do this

    Problems binding to a the content of a WPF DataGridCell in XAML

    0 讨论(0)
提交回复
热议问题