我有一个列表框,可能包含大量带有支持数据的项目。为了处理数据虚拟化,我通过编写一个实现与ObservableCollection相同的接口的集合并与WPF的UI虚拟化相结合,并可以根据需要调整我们的后备数据。
这很好用。当我用列表框引入多选时,问题出现了。因为列表框按对象而不是索引(SelectedItems)管理所选项目,所以选择所有项目会导致所有后备数据被列表框中的所有后备数据保留在内存中,从而破坏了数据虚拟化......
有没有办法防止这种情况发生,除了重写ListBox以管理索引而不是对象的选择?
谢谢!
埃里克
答案 0 :(得分:0)
为什么不在UI控件上使用Virtualizing选项?这只会加载要在屏幕上显示的数据。
答案 1 :(得分:0)
我们使用UI虚拟化来控制我们的数据虚拟化,但是在列表框保留选择时遇到了问题,所以我们的数据没有被卸载。
我最终做的是绑定到虚拟化堆栈面板的项目生成器并监听生成的容器的数据上下文更改事件。当发生这种情况时,我要么从包装器中卸载真实数据。