简体   繁体   English

在WPF中,当在另一个DataGrid的DataGridTemplateColumn中使用DataGrid时,可以自定义列吗?

[英]In WPF, when using a DataGrid in another DataGrid's DataGridTemplateColumn, can I customize columns?

So I have the following data grid, bound to some dynamic data: 所以我有以下数据网格,绑定到一些动态数据:

<DataGrid x:Name="dataGrid" AutoGenerateColumns="False" ColumnHeaderStyle="{StaticResource timmy}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="First Name" Binding="{Binding FirstName}"></DataGridTextColumn>
        <DataGridTextColumn Header="Last Name" Binding="{Binding LastName}"></DataGridTextColumn>
        <DataGridTemplateColumn Header="Cars">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <DataGrid ItemsSource="{Binding Cars}" AutoGenerateColumns="False" Margin="-10,-3,-10,-5" ColumnHeaderStyle="{StaticResource timmy2}">
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="Brand" Binding="{Binding Brand}" Width="170"></DataGridTextColumn>
                            <DataGridTextColumn Header="Model" Binding="{Binding Model}" Width="170"></DataGridTextColumn>
                        </DataGrid.Columns>
                    </DataGrid>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

This prototype works well, but I now need to populate the inner DataGrid's columns at runtime. 这个原型很好用,但是我现在需要在运行时填充内部DataGrid的列。 I know I can set a DataGridTemplateColumn programmatically like so: 我知道我可以像下面这样以编程方式设置DataGridTemplateColumn:

DataGridTemplateColumn gridColumn = new DataGridTemplateColumn();
gridColumn.Header = key;
gridColumn.Width = DataGridLength.Auto;
gridColumn.MinWidth = 160.0;

var dataGridFactory = new FrameworkElementFactory(typeof(DataGrid));
gridColumn.CellTemplate = new DataTemplate() { VisualTree = dataGridFactory };

this.resultsDataGrid.Columns.Add(gridColumn);

However, since I'm dealing with a factory, how can I set my columns? 但是,由于我要与一家工厂打交道,如何设置列?

I found a solution. 我找到了解决方案。 I had to create a custom XAML string in code and then use a XamlReader to read it: 我必须在代码中创建一个自定义XAML字符串,然后使用XamlReader读取它:

DataGridTemplateColumn gridColumn = new DataGridTemplateColumn();
gridColumn.Header = patientColumnName;
gridColumn.Width = DataGridLength.Auto;

StringBuilder xamlBuilder = new StringBuilder();
xamlBuilder.AppendLine("<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">");
xamlBuilder.AppendLine("    <DataGrid ItemsSource = \"{Binding Visits}\" AutoGenerateColumns = \"False\" Margin = \"-10,-3,-10,-5\">");
xamlBuilder.AppendLine("        <DataGrid.Columns>");
// Put whatever here.
xamlBuilder.AppendLine("        </DataGrid.Columns>");
xamlBuilder.AppendLine("    </DataGrid>");
xamlBuilder.AppendLine("</DataTemplate>");

DataTemplate dataTemplate = XamlReader.Parse(xamlBuilder.ToString()) as DataTemplate;

gridColumn.CellTemplate = dataTemplate;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM