Mahapps.metro: DataGrid virtualization broken when grouping activated

Created on 7 Sep 2017  路  3Comments  路  Source: MahApps/MahApps.Metro

Hi,

Can someone explain me why MahApps has this trigger in MetroDataGrid style (Controls.DataGrid.xaml)?

<Style.Triggers> <Trigger Property="IsGrouping" Value="True"> <Setter Property="ScrollViewer.CanContentScroll" Value="False" /> </Trigger> </Style.Triggers>

This is breaking virtualization when grouping is activated. From framework 4.5 I think virtualization is supported with grouping! (that said it was not the case before)

But even with framework 4.0 (where virtualization is not working when grouping activated), I don't understand what this trigger is doing.

Thanks for any help.

For now I have a style which overrides this trigger:
<Style TargetType="{x:Type DataGrid}" BasedOn="{StaticResource MetroDataGrid}"> <Setter Property="ScrollViewer.CanContentScroll" Value="True" /> <Style.Triggers> <Trigger Property="IsGrouping" Value="True"> <Setter Property="ScrollViewer.CanContentScroll" Value="True" /> </Trigger> </Style.Triggers> </Style>

Environment

  • MahApps.Metro 1.5.0
  • Windows OS 10
  • Visual Studio 2017
  • .NET Framework 4.6.2
Breaking Change

Most helpful comment

Hi, suddenly found that if u make grouping in xaml on DataGrid, then Virtualisation can be enabled by setting
VirtualizingPanel.IsVirtualizingWhenGrouping="True"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.IsContainerVirtualizable="True"
VirtualizingPanel.ScrollUnit="Item"
ScrollViewer.CanContentScroll ="True"
in DataGrid.

All 3 comments

@bplatypus I'll changes this in v2.0

I got a similar issue using Listview...virtualization does not work when i am using a collectionview aka grouping.

I tried to adapt bplatypus override but somehow it is not really working.

            <Style TargetType="{x:Type ListView}" BasedOn="{StaticResource MetroListView}">
                <Setter Property="ScrollViewer.CanContentScroll" Value="True" />
                <Style.Triggers>
                    <Trigger Property="IsGrouping" Value="True">
                        <Setter Property="ScrollViewer.CanContentScroll" Value="True" />
                    </Trigger>
                </Style.Triggers>
            </Style>
 <ListView
                    x:Name="ListView_DownloadItems"
                    Style="{StaticResource VirtualisedMetroListView}"
                    VirtualizingPanel.IsVirtualizingWhenGrouping="True"
                    MinHeight="250"
                    dng:DropBehavior.PreviewDropCommand="{Binding PreviewDropCommand}"
                    ItemsSource="{Binding DownloadItems}"
                    PreviewKeyUp="OnGridKeyUp"
                    SelectionMode="Extended"                   
                    BorderThickness="0,0,0,0"                    
                    Margin="6,0">
    Private Sub CreateView()

        view = DirectCast(CollectionViewSource.GetDefaultView(DownloadItems), CollectionView)

        Dim groupDescription As PropertyGroupDescription

        groupDescription = New PropertyGroupDescription("GroupDescriptionIdentifier")
        view.GroupDescriptions.Add(groupDescription)

        groupDescription = New PropertyGroupDescription("PackageName")
        view.GroupDescriptions.Add(groupDescription)

        If _settings.InstantVideo = True Then
            view.SortDescriptions.Add(New SortDescription("RequiredForInstantVideo", ListSortDirection.Descending))
        End If

    End Sub

Any idea?

Hi, suddenly found that if u make grouping in xaml on DataGrid, then Virtualisation can be enabled by setting
VirtualizingPanel.IsVirtualizingWhenGrouping="True"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.IsContainerVirtualizable="True"
VirtualizingPanel.ScrollUnit="Item"
ScrollViewer.CanContentScroll ="True"
in DataGrid.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

ghost picture ghost  路  18Comments

seb30 picture seb30  路  12Comments

kayone picture kayone  路  10Comments

webprofusion-chrisc picture webprofusion-chrisc  路  11Comments

webprofusion-chrisc picture webprofusion-chrisc  路  10Comments