WPF Datagrid,是否可以混合使用Groups和plain(非分组)行?

时间:2012-02-09 12:13:48

标签: wpf datagrid virtualization

我正在使用WPF Datagrid,并且要求显示10,000行,因此需要虚拟化。从StackOverflow上的几篇文章中我看到WPF Datagrid无法实现虚拟化+分组。这是因为渲染组的Expander模板无法虚拟化。

在我们的系统中,我们可能有10,000行,但每组只有3或4行。此外,绝大多数行未分组 - 它们具有空GroupId。在原型中,我正在将这些渲染作为没有标题的组扩展器。我理想的是那些不是分组的,只是行,而其余部分在扩展器中呈现。这可能吗?

WPF Datagrid with Grouped and Ungrouped rows

1 个答案:

答案 0 :(得分:2)

试试这个......

<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