Silverlight 2中大量数据的列表框性能问题

时间:2009-04-15 11:53:44

标签: silverlight silverlight-2.0

我使用Silverlight 2,当我使用Listbox控件时,我遇到了性能问题。我绑定了大约500条记录的对象列表,数据绑定需要3-4秒。

但我没有使用DataGrid这个问题。

有没有人有解决方案来改善Listbox中的性能问题?

2 个答案:

答案 0 :(得分:4)

这背后的原因是DataGrid支持UI虚拟化而ListBox不支持。这意味着DataGrid仅为可见项创建可视元素,而ListBox为其所有项创建可视元素。 每当您必须从可能非常大的项列表中进行选择时,请使用DataGrid而不是ListBox。您可以设置DataGrid的样式并使用TemplateColumn使其看起来像ListBox。

迈克尔

答案 1 :(得分:2)

如果不了解有关您的应用程序的其他上下文,可能会有一些事情发生。首先想到的是你有一个非常“沉重”的视觉树。 ListBox中的每个项目都将创建一些可视对象图形。你拥有的越多,渲染所需的时间就越长。

当这些项目在屏幕上不可见时,Silverlight仍在进行渲染工作。基本上这意味着正在对所有数据绑定的ListBox项执行Layout()和Measure()传递,即使它们不可见。

诀窍是使用虚拟化强制Silverlight不对当时控件可见区域内不可见的控件执行布局/测量传递。

这是一篇博客文章,介绍如何使用StackPanel执行此操作。将它抽象到ListBox或者更好,你可以简单地将ListBox的控件容器设置为虚拟化堆栈面板然后你就完成了:)

http://blogs.msdn.com/uberdemo/archive/2009/02/18/a-virtualizedstackpanel-control-in-silverlight-2-0.aspx