【问题标题】:In WPF, when using a DataGrid in another DataGrid's DataGridTemplateColumn, can I customize columns?在 WPF 中,当在另一个 DataGrid 的 DataGridTemplateColumn 中使用 DataGrid 时,我可以自定义列吗?
【发布时间】:2018-04-06 23:15:57
【问题描述】:

所以我有以下数据网格,绑定到一些动态数据:

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

这个原型运行良好,但我现在需要在运行时填充内部 DataGrid 的列。我知道我可以像这样以编程方式设置 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);

但是,由于我在与工厂打交道,我该如何设置列?

【问题讨论】:

    标签: c# .net wpf datagrid datagridtemplatecolumn


    【解决方案1】:

    我找到了解决方案。我必须在代码中创建一个自定义 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;
    

    【讨论】:

      猜你喜欢
      • 2019-06-01
      • 2014-06-12
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 2021-05-01
      • 2013-06-30
      • 1970-01-01
      • 2010-11-02
      相关资源
      最近更新 更多