gpt4 book ai didi

wpf - 如何在wpf中处理带有大量ItemSsource的ListBox?

转载 作者:行者123 更新时间:2023-12-04 04:39:39 25 4
gpt4 key购买 nike

在我的 WPF 工作中,有一个包含大量 ItemSource(Observablecollection,超过 400000,包括图片、字符串等)的 ListBox,每次运行它时,加载 ListBox 需要很多时间和空间。有什么好的解决办法吗?

最佳答案

只是处理您的问题的 UI 和 WPF 特定的位:您需要虚拟化您的 ListBox,这意味着不是完整的“ItemsSource”被加载到控件中,而只是当前正在显示的部分(加上一点到当用户向下滚动时做好准备)。 WPF ListBox 支持开箱即用的虚拟化,使用“VirtualizingStackPanel”附加属性。

这是一个片段,显示了原则上的用法:

<ListBox ItemsSource="{Binding Items}"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
</ListBox>

如果您对此主题进行一些研究,您会发现大量资源可以指导您如何正确实现虚拟化。

话虽如此,以上仅涉及性能问题的 UI 渲染位。您用作“ItemsSource”的项目列表仍将在幕后完全加载,因为这与 WPF 无关。对于 400k 的数据集,包括图像(比如每个 500k),您将需要比任何标准机器都多的内存。实际上,我很惊讶它可以正常工作,但这在很大程度上取决于图像大小。无论如何,您将大量数据加载到内存中的方法远非可扩展的。在这里考虑重新设计,一次加载您需要的位并使用虚拟化显示它们。没有用户会一次处理 50 万个数据集......

关于wpf - 如何在wpf中处理带有大量ItemSsource的ListBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19089458/

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