Динамическое связывание динамически привязанных столбцов UWP Datagrid - PullRequest
0 голосов
/ 23 сентября 2019

Я хочу создать сетку данных с автоматически сгенерированными столбцами.Заголовок должен содержать 6 строк (TextBlocks). Поскольку каждая запись содержит массив данных, я перебираю этот массив и добавляю столько столбцов, сколько требуется.Как применить шаблон данных к заголовку и связать его с массивом с помощью индекса.Этот подход очень хорошо работал в WPF, но я не нашел способа создать его в UWP.

Вот что у меня есть:

<Style x:Key="HeaderCellTemplate" TargetType="localprimitives:DataGridColumnHeader">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="localprimitives:DataGridColumnHeader">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition/>
                        <RowDefinition/>
                        <RowDefinition/>
                        <RowDefinition/>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
                    <TextBlock x:Name="Header1" Text="hi there" Grid.Column="0" Grid.Row="0"/>
                    <TextBlock x:Name="Header2" Grid.Column="0" Grid.Row="1" />
                    <TextBlock x:Name="Header3" Grid.Column="0" Grid.Row="2"/>
                    <TextBlock x:Name="Header4" Grid.Column="0" Grid.Row="3"/>
                    <TextBlock x:Name="Header5" Grid.Column="0" Grid.Row="4"/>
                    <TextBlock x:Name="Header6" Grid.Column="0" Grid.Row="5"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

А вот AutoGenerateColumnОбработчик

    public void AutoGenerateColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
        if (e.PropertyName == "PlanData")
        {
            GenerateDataColumns();
            e.Cancel = true;
        }

    }

    private void GenerateDataColumns()
    {
        _headerTemplate = Application.Current.Resources[HeaderTemplateKey] as Style;

        for (int c = 0; c < _numberOfDataColumns; c++)
        {
            var column = new DataGridTextColumn();
            column.HeaderStyle = _headerTemplate;
            //how to do binding in header cells?
            _grid.Columns.Add(column);
            _grid.ApplyTemplate();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...