Я сталкиваюсь со странным поведением с DataGrid, который имеет GroupDescription, и с параметром VirtualizingPanel.IsVirtualizingWhenGrouping="True" в xaml.
Вот часть кода:
В модели представления:
if (collectionView.GroupDescriptions == null) return;
collectionView.GroupDescriptions.Add(new PropertyGroupDescription("Type"));
В XAML
...
<Style x:Key="DataGridGroupHeaderCountStyle" TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander Background="{Binding Path=Tag,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=DataGrid}}"
BorderBrush="{Binding Path=Tag,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=DataGrid}}"
Foreground="{Binding Path=Tag,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=DataGrid}}"
Style="{StaticResource DataGridExpanderGroupStyle}">
<Expander.Header>
<DockPanel>
<TextBlock MinWidth="100"
Margin="5,0,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Text="{Binding Path=Name}" />
<TextBlock HorizontalAlignment="Left"
VerticalAlignment="Center"
Text="{Binding Path=ItemCount}" />
</DockPanel>
</Expander.Header>
<Expander.Content>
<ItemsPresenter />
</Expander.Content>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
...
<DataGrid x:Name="MyDataGrid"
Grid.Row="1"
Grid.Column="0"
Grid.ColumnSpan="2"
IsReadOnly="True"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserSortColumns="True"
EnableRowVirtualization="True"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Path=CollectionView,
Mode=OneWay}"
ScrollViewer.IsDeferredScrollingEnabled="True"
SelectionChanged="MyDataGridOnSelectionChanged"
SelectionMode="Extended"
SelectorHelper.AutoScrollIntoView="True"
Tag="{Binding Path=ColorsTheme.Border}"
VirtualizingPanel.IsVirtualizingWhenGrouping="True">
<DataGrid.GroupStyle>
<GroupStyle ContainerStyle="{StaticResource DataGridGroupHeaderCountStyle}">
<GroupStyle.Panel>
<ItemsPanelTemplate>
<DataGridRowsPresenter />
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
Описание проблемы:
Например, у меня есть, скажем, 25 000 строк в сетке данных. Загрузка в порядке с виртуализацией.
Моя проблема заключается в том, что когда я нажимаю на первую (из двух) группу, чтобы свернуть ее: я никогда не вижу вторую группу, она исчезает! Кто-нибудь знает, почему? или это баг?
Когда я не использую VirtualizingPanel.IsVirtualizingWhenGrouping="True", загрузка очень (чрезвычайно) медленная, но, по крайней мере, поведение групп нормальное, это означает, что я могу свернуть первую группу, я вижу второе пришествие ниже.