我遇到了一个具有GroupDescription的DataGrid的奇怪行为,并且选项VirtualizingPanel.IsVirtualizingWhenGrouping =" True"在xaml。
以下是代码的一部分:
在ViewModel中:
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 =&#34; True&#34;时,加载非常(非常)缓慢,但至少,组的行为是正常的,这意味着我可以崩溃第一组,我可以看到下面的第二组。
答案 0 :(得分:0)
也许有点晚,但是可以帮上忙。我们刚遇到这个问题,发现应该出现的组中的 DataGridRowsPresenter 保持其 Visibility = Collapsed 。结果,该组本身的ActualHeight为0而不呈现。
为解决此问题,我们在此ItemPanel定义中砍了(?):
<DataGrid.ItemsPanel>
<ItemsPanelTemplate>
<DataGridRowsPresenter IsItemsHost="True" Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type Expander}}, Path=IsExpanded, Converter={StaticResource BooleanToVisibilityConverter}}"/>
</ItemsPanelTemplate>
</DataGrid.ItemsPanel>
如果组已扩展,则基本执行“可见性”。这似乎保留了分组时行虚拟化的优势,并确保可以看到可见范围之外的组。
看到其他人遇到相同的问题,可能会继续将此错误作为Microsoft的错误,并带有此“ hack”,以暗示在虚拟化,分组和滚动查看器交互中可能被忽略的内容。