WPF DataTemplate и определение столбцов - PullRequest
0 голосов
/ 09 января 2020

Мне нужно улучшить рендер моей сетки. У меня есть шаблон:

<DataTemplate x:Key="ubitTemplateService" DataType="{x:Type data:uBit}">
    <Grid HorizontalAlignment="Stretch" x:Name="grdBit">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" SharedSizeGroup="MAMC" />
            <ColumnDefinition Width="Auto" SharedSizeGroup="ID" />
            <ColumnDefinition Width="Auto" SharedSizeGroup="lblVIS" />
        </Grid.ColumnDefinitions>
        <Label Grid.Column="0" Content="{Binding FIELD_Mac, Mode=OneWay}" Style="{StaticResource labelStyle1}" />
        <TextBlock Grid.Column="1" Text="{Binding Name}" Style="{StaticResource txtBlockStyle2}" />
        <Label Grid.Column="1" Content="{Binding Show.Caption}" Style="{StaticResource labelStyle4}" />
    </Grid>
</DataTemplate>

В основном для каждой записи моей коллекции отображается сетка, но, поскольку у меня есть 300 или более записей, весь рендеринг занимает около 2-3 секунд (каждый шаблон отображается в a Listbox) Я хотел бы изменить макет и использовать сетку данных следующим образом:

<DataGrid x:Name="gridDati" BorderBrush="#abadb3" CanUserSortColumns="true" Margin="8,7,5,8">
                <DataGrid.Columns>
                    <DataGridTemplateColumn Header="Name" CellTemplateSelector="{StaticResource DataTemplateSelector}" />
                </DataGrid.Columns>
            </DataGrid>

, и я хотел бы использовать шаблон данных для отображения столбцов, которые могут меняться в зависимости от моего типа данных. Селектор шаблона:

<local:DataconfigTemplateSelector ubitTemplateAv="{StaticResource ubitTemplateAv}" x:Key="DataTemplateSelector" />

Проблема состоит в том, что я хочу вставить в свою таблицу данных определение столбцов DataGrid, например DataGridTextColumn:

    <DataTemplate x:Key="ubitTemplateAv">
        <StackPanel>
            ...
        </StackPanel>                
    </DataTemplate>

Как вставить моя таблица данных определяет столбцы как?

<DataGridTextColumn Binding="{Binding Name, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Header="Nome" Foreground="Black" IsReadOnly="True" x:Name="colName">
            <DataGridTextColumn.ElementStyle>
                <Style TargetType="TextBlock">
                    <Setter Property="Padding" Value="4,7,4,6" />
                </Style>
            </DataGridTextColumn.ElementStyle>
        </DataGridTextColumn>           
        <DataGridTextColumn Binding="{Binding SurName, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Header="SurName" Foreground="Black" IsReadOnly="True" x:Name="colSurName">
            <DataGridTextColumn.ElementStyle>
                <Style TargetType="TextBlock">
                    <Setter Property="Padding" Value="4,7,4,6" />
                </Style>
            </DataGridTextColumn.ElementStyle>
        </DataGridTextColumn>   

1 Ответ

1 голос
/ 09 января 2020

ключ должен использовать DataGridTemplateColumn вместо DataGridTextColumn. Тогда вы можете сделать это:

<DataGridTemplateColumn
    Width="80">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Foo}" Padding="4,7,4,6"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...