我使用Silverlight 2,当我使用Listbox控件时,我遇到了性能问题。我绑定了大约500条记录的对象列表,数据绑定需要3-4秒。
但我没有使用DataGrid这个问题。
有没有人有解决方案来改善Listbox中的性能问题?
答案 0 :(得分:4)
这背后的原因是DataGrid支持UI虚拟化而ListBox不支持。这意味着DataGrid仅为可见项创建可视元素,而ListBox为其所有项创建可视元素。 每当您必须从可能非常大的项列表中进行选择时,请使用DataGrid而不是ListBox。您可以设置DataGrid的样式并使用TemplateColumn使其看起来像ListBox。
迈克尔
答案 1 :(得分:2)
如果不了解有关您的应用程序的其他上下文,可能会有一些事情发生。首先想到的是你有一个非常“沉重”的视觉树。 ListBox中的每个项目都将创建一些可视对象图形。你拥有的越多,渲染所需的时间就越长。
当这些项目在屏幕上不可见时,Silverlight仍在进行渲染工作。基本上这意味着正在对所有数据绑定的ListBox项执行Layout()和Measure()传递,即使它们不可见。
诀窍是使用虚拟化强制Silverlight不对当时控件可见区域内不可见的控件执行布局/测量传递。
这是一篇博客文章,介绍如何使用StackPanel执行此操作。将它抽象到ListBox或者更好,你可以简单地将ListBox的控件容器设置为虚拟化堆栈面板然后你就完成了:)