我正在使用WPF Datagrid,并且要求显示10,000行,因此需要虚拟化。从StackOverflow上的几篇文章中我看到WPF Datagrid无法实现虚拟化+分组。这是因为渲染组的Expander模板无法虚拟化。
在我们的系统中,我们可能有10,000行,但每组只有3或4行。此外,绝大多数行未分组 - 它们具有空GroupId。在原型中,我正在将这些渲染作为没有标题的组扩展器。我理想的是那些不是分组的,只是行,而其余部分在扩展器中呈现。这可能吗?
答案 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