Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF DataGrid:isVirtualizangWhenGrouping=";“真的”;不起作用_C#_Wpf_Datagrid_Ui Virtualization - Fatal编程技术网

C# WPF DataGrid:isVirtualizangWhenGrouping=";“真的”;不起作用

C# WPF DataGrid:isVirtualizangWhenGrouping=";“真的”;不起作用,c#,wpf,datagrid,ui-virtualization,C#,Wpf,Datagrid,Ui Virtualization,我有一个DataGrid,它的CollectionViewSource绑定到它的ItemSource属性: <DataGrid Grid.Row="0" RowBackground="#10808080" AlternatingRowBackground="Transparent" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding Sourc

我有一个DataGrid,它的CollectionViewSource绑定到它的ItemSource属性:

<DataGrid Grid.Row="0" RowBackground="#10808080" AlternatingRowBackground="Transparent"
          HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
          ItemsSource="{Binding Source={StaticResource bookingsViewSource}}"
          RowHeight="27"
          VirtualizingPanel.IsVirtualizingWhenGrouping="True"
          VirtualizingPanel.IsContainerVirtualizable="True"
          VirtualizingPanel.ScrollUnit="Item"
          AutoGenerateColumns="False">

    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding date, StringFormat=dd.MM.yyyy}" Header="date"/>
        <DataGridTextColumn Binding="{Binding Path=customers.name}" Header="customer"/>
        <DataGridTextColumn Binding="{Binding Path=customers.street}" Header="adress"/>
    </DataGrid.Columns>

    <DataGrid.GroupStyle>
        <GroupStyle>
            <GroupStyle.ContainerStyle>
                <Style TargetType="{x:Type GroupItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <Expander Header="{Binding Path=Name}" IsExpanded="True">
                                    <ItemsPresenter />
                                </Expander>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </GroupStyle.ContainerStyle>
        </GroupStyle>
    </DataGrid.GroupStyle>
</DataGrid>
在代码隐藏部分填写。没有分组,一切都进行得很顺利。但是当我添加分组
时,DataGrid大约需要一分钟来加载

在.NET 4.5中,有一个新属性名为
VirtualizingPanel.isvirtualizingwengroup
,我已经将其设置为true,但加载时间没有减少


我不明白为什么。有什么想法吗?

来自《MacDonald M.-Pro WPF 4.5 C版》一书#

有许多因素可能会破坏UI虚拟化,有时是在您意想不到的情况下:

  • 将列表控件放在ScrollViewer中:ScrollViewer在 它的子内容。问题是子内容被赋予无限的“虚拟” 空间在这个虚拟空间中,ListBox以完整的大小呈现自己,并显示其所有子对象 展出的物品。作为副作用,每个项目都会占用自己的内存 ListBoxItem对象。当您在容器中放置列表框时,就会出现此问题 这并不试图限制它的大小;例如,如果 将其弹出到StackPanel而不是网格中
  • 更改列表的控件模板并未能使用ItemsPresenter: ItemsPresenter使用ItemsPanelTemplate,它指定 虚拟化跟踪面板。如果你打破了这种关系或者你改变了 ItemsPanelTemplate你自己,这样它就不会使用虚拟化StackPanel,你会输的 虚拟化功能
  • 不使用数据绑定:这应该是显而易见的,但如果以编程方式填充列表- 例如,通过动态创建ListBoxItem对象,您不需要 虚拟化将会发生。当然,你可以考虑使用你自己的优化。 策略,例如只创建您需要的对象,并且只在 他们需要的时间。您将通过使用 创建即时节点以填充第22章中的目录树。 如果您有一个很大的列表,您需要避免这些做法以确保良好的性能

另外,在我的案例中,问题是由
MahApps.Metro
样式引起的。

在启用分组后,也经历了难以置信的减速,并且恰好使用MahApps Metro进行样式设置。事实上,性能损失是如此严重,以至于当您尝试扩展组时,应用程序就无法使用。幸运的是,我无意中发现了这篇文章,它指出网格的风格是一个可能的原因,事实确实如此。如果希望保持MahApps样式,只需在datagrid上设置一个属性即可解决性能问题。ScrollViewer.CanContentScroll=“True”第二个选项,即使您将VirtualzingStackPanel作为ItemsPanelTemplate,它也会减慢速度。。。
<CollectionViewSource x:Key="bookingsViewSource"
                      d:DesignSource="{d:DesignInstance {x:Type Database:bookings}}">
    <CollectionViewSource.GroupDescriptions>
        <PropertyGroupDescription PropertyName="providerID"/>
    </CollectionViewSource.GroupDescriptions>
</CollectionViewSource>