我尝试以扩展选择模式以编程方式更新列表框中的所选项目。
我的表现如下:
foreach (var selectedItem in ItemsForSelection)
{
_myList.SelectedItems.Add(selectedItem);
}
我的问题是,当所选项目的数量很大时,更新速度非常慢。
问题的根源在于,列表框不会从MultiSelector驱动,可以通过使用BeginUpdateSelectedItems和EndUpdateSelectedItems方法调整它以执行快速批量更新。
有没有办法在列表框中获得类似的结果?
答案 0 :(得分:2)
ListBox中是否有BeginUpdate
和EndUpdate
方法...
_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派生来调用它。奇怪的选择,即。