gpt4 book ai didi

c# - 如何在标准 WPF ListView 中启用 UI 虚拟化

转载 作者:太空狗 更新时间:2023-10-29 22:12:21 24 4
gpt4 key购买 nike

我正在使用 .NET 4.5/VS2012,我有一个 ListView 看起来像这样

<ListView 
VirtualizingPanel.IsContainerVirtualizable="True"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.IsVirtualizingWhenGrouping="True"
Grid.Row="1"
Name="eventLogList"
Margin="5,0,5,0"
BorderBrush="Black"
BorderThickness="2"
ItemsSource="{Binding EventLogs}"
SelectedItem="{Binding SelectedEventLog}"
local:ListViewSorter.CustomListViewSorter="EventLogViewer.UI.EventLogItemComparer"
SelectionMode="Single">

<ListView.GroupStyle>
<GroupStyle HidesIfEmpty="False">
<GroupStyle.ContainerStyle>
<Style TargetType="GroupItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GroupItem">
<Expander IsExpanded="True">
<Expander.Header>
<TextBlock FontSize="20" TextWrapping="Wrap" Margin="0,10,0,5" >
<Bold><TextBlock Text="{Binding Name}"/></Bold> - <TextBlock FontSize="20" Text="{Binding ItemCount}"/> logs
</TextBlock>
</Expander.Header>
<ItemsPresenter/>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ListView.GroupStyle>
<ListView.View>
<GridView>
<GridViewColumn
Header="event id"
Width="120"
DisplayMemberBinding="{Binding EventID}" />
<GridViewColumn
Header="level"
Width="160"
DisplayMemberBinding="{Binding Level}" />
<GridViewColumn
Header="server"
Width="160"
DisplayMemberBinding="{Binding Server}" />
<GridViewColumn
Header="log name"
Width="160"
DisplayMemberBinding="{Binding LogName}" />
<GridViewColumn
Header="source"
Width="240"
DisplayMemberBinding="{Binding Source}" />
<GridViewColumn
Header="logged"
Width="240"
DisplayMemberBinding="{Binding Logged}" />
</GridView>
</ListView.View>
</ListView>

但性能仍然没有任何改善。我找到了一个使用 ListBox 的示例,但是如何虚拟化 ListView?我挣扎了很久。我听说在以前版本的 WPF 中,分组时虚拟化是关闭的,但是在 .NET 4.5 中,WPF 有一个 IsVirtualizingWhenGrouping 属性,我已经将它设置为 True

更新:罪魁祸首是自定义样式,删除它后, ListView 像黄油一样流畅地运行

最佳答案

“UI 虚拟化仅在内存中存储可见项但在数据绑定(bind)场景中将整个数据结构存储在内存中。相比之下,数据虚拟化仅存储屏幕上可见的数据项在内存中。”

“默认情况下,当 ListView 和 ListBox 控件的列表项绑定(bind)到数据时,会启用 UI 虚拟化。”

For more info view the original MSDN source.

关于c# - 如何在标准 WPF ListView 中启用 UI 虚拟化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14456075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com