我正在使用 .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
.
Update:罪魁祸首是自定义样式,删除它后,列表视图像黄油一样流畅运行
“UI 虚拟化仅在内存中存储可见项目但在数据绑定场景中将整个数据结构存储在内存中。相比之下,数据虚拟化仅将屏幕上可见的数据项存储在内存中。”
“默认情况下,当 ListView 和 ListBox 控件的列表项绑定到数据时,将启用 UI 虚拟化。”
有关详细信息,请查看原始 MSDN 源。 https://msdn.microsoft.com/en-us/library/cc716879(v=vs.110).aspx#Displaying
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)