在列表框中以编程方式进行多选更新很慢

时间:2010-02-21 21:18:07

标签: wpf listbox selection

我尝试以扩展选择模式以编程方式更新列表框中的所选项目。
我的表现如下:

foreach (var selectedItem in ItemsForSelection)
{
  _myList.SelectedItems.Add(selectedItem);
}

我的问题是,当所选项目的数量很大时,更新速度非常慢。
问题的根源在于,列表框不会从MultiSelector驱动,可以通过使用BeginUpdateSelectedItems和EndUpdateSelectedItems方法调整它以执行快速批量更新。
有没有办法在列表框中获得类似的结果?

3 个答案:

答案 0 :(得分:2)

ListBox中是否有BeginUpdateEndUpdate方法...

_myList.BeginUpdate();
foreach (var selectedItem in ItemsForSelection)
{
  _myList.SelectedItems.Add(selectedItem);
}
_myList.EndUpdate();

假设_myList是一个ListBox ...开始/结束更新方法对冻结WM_PAINT消息并分别解冻,从而使其无闪烁和快速。

答案 1 :(得分:0)

添加一大块项目后,尝试通过将调度程序框架推送到调度程序来抽取调度程序。

http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcherframe.aspx

答案 2 :(得分:0)

您可以使用ListBox上的SetSelectedItems(IEnumerable)。这个函数包含SelectionChange.Begin / End中的选择更改(遗憾的是,当然只在内部可用),这应该只导致一个选择更改事件发生。

请注意,SetSelectedItems受到保护,因此您必须使用自己的ListBox派生来调用它。奇怪的选择,即。