这里有两个问题,但我认为这两个主题交织在一起,足以保证将它们包含在一起。
在我们的应用程序中,我们有一个ListBox
,其中填充了可能是大量项目的内容。这些项目中的每一个都显示有相当复杂的项目模板。它必定相当复杂,尽管它可能被削减得更多,但我可能不会花很多钱。 ListBox
中的项目来自ListCollectionView
,该ObservableCollection<>
由要显示的对象的ListCollectionView
构造而成。
我们有两个问题。
第一个是,当我们重新配置Refresh
的过滤器并在其上调用ListBox
时,在拆下并重新创建UI时,UI会出现非常明显的锁定,锁定时间为几秒钟,并且ListBox
会重新填充。锁定的持续时间似乎与ListBox
中包含的元素数量有关,并且当ListCollectionView
的客户区中装有物品时,锁定时间最长。我们可以肯定的是,锁定是由重新创建的项目模板引起的。我曾尝试启用虚拟化,但这对减少或消除速度下降没有任何作用。我还在查看其他一些优化,例如检查我们的绑定(bind)和修改布局。是否有任何方法可以避免该特定问题,加快速度或将其移至其他线程? (我知道最后一个可能性很小,因为渲染都是单线程的,但是也许有一些解决方法...)
第二个涉及对ListCollectionView
的过滤。尽管目前这不是问题,但我们认为筛选有可能成为问题并在UI线程上引起明显的锁定。我正在努力减少过滤开销,但是我想知道是否有一种方法可以将ListCollectionView
上的Refresh调用移到另一个线程上?到目前为止,我的尝试都没有成功,这似乎是因为ojit_code不会自动将某些事件编码到正确的线程上。
对这两个问题的任何已知或潜在解决方案的指针或解释将非常有帮助。
最佳答案
this SO线程中有关数据网格渲染和绑定(bind)的一些有趣想法-您也可以将其应用于列表框方案...