WPF Datagrid, возможно ли иметь смесь групп и простых (не сгруппированных) строк? - PullRequest
3 голосов
/ 09 февраля 2012

Я использую WPF Datagrid, и у меня есть требование показать 10000 строк, поэтому требуется виртуализация. Из нескольких статей о StackOverflow я вижу, что виртуализация + группировка невозможны с WPF Datagrid. Это связано с тем, что шаблон Expander для визуализации группы не может быть виртуализирован.

В нашей системе у нас может быть 10 000 строк, но только 3 или 4 в каждой группе. Кроме того, подавляющее большинство строк не сгруппированы - они имеют нулевой идентификатор группы. В прототипе я работаю над этим рендером как групповой экспандер без заголовка. В идеале мне бы хотелось, чтобы они не группировались, а были просто строками, а остальные визуализировались внутри расширителя. Это возможно?

WPF Datagrid with Grouped and Ungrouped rows

1 Ответ

2 голосов
/ 10 февраля 2012

попробуйте это ...

<GroupStyle.ContainerStyle>
    <Style TargetType="{x:Type GroupItem}">
        <Style.Resources>
            <ControlTemplate x:Key="MultiItemGroupTemplate"
                             TargetType="{x:Type GroupItem}">
                <Expander IsExpanded="False">
                    <Expander.Header>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding Path=Name}" />
                        </StackPanel>
                    </Expander.Header>
                    <ItemsPresenter />
                </Expander>
            </ControlTemplate>
            <ControlTemplate x:Key="SingleItemGroupTemplate"
                             TargetType="{x:Type GroupItem}">
                   <ItemsPresenter />
            </ControlTemplate>
        </Style.Resources>                                
        <Style.Triggers>
            <DataTrigger Binding="{Binding ItemCount}" Value="1">
                <Setter Property="Template"
                        Value="{StaticResource SingleItemGroupTemplate}">
                </Setter>
            </DataTrigger>
        </Style.Triggers>
        <Setter Property="Template"
                Value="{StaticResource MultiItemGroupTemplate}"/>
    </Style>
</GroupStyle.ContainerStyle>

Примечание : обратите внимание, что это изменится для DataGrid ... DataGrid ItemPresenter на самом деле DataGridRowsPresenter

...