我有一个ListView和TextBox用于输入搜索文本。
当用户搜索某些文本时,我开始长时间运行的搜索操作(在UI线程上,通过UI线程计时器),并且一次又一次地,当搜索仍处于活动状态时,我改变了ICollectionView.Filter
属性,用于使ListView刷新并显示搜索找到的匹配项目。
问题在于,如果用户右键单击其中一个项目,然后在后台进行搜索,则刷新树,然后ContextMenu消失。
如何防止这种情况发生?
答案 0 :(得分:1)
这是我的理论: 因为刷新了整个树,所以WPF无法知道项目(右键单击)与刷新后的项目完全相同。从技术上讲,该项目甚至不再“存在”。它实际上是一个具有完全相同属性的新项目(从ListView的角度来看)。
有一些方法可以尝试修复此问题:
捕获项目的右键,存储项目;捕获树刷新,检查项目是否等于存储的项目;如果相等则显示ContextMenu。
不是刷新整个树,而是将项目添加到列表的末尾。
在ContextMenu打开时,暂停刷新树。