防止在ListViewItem上的ContextMenu在更改过滤器时消失
本文关键字:过滤器 消失 ContextMenu ListViewItem 上的 | 更新日期: 2023-09-27 18:05:34
我有一个ListView和TextBox输入搜索文本。
当用户搜索某些文本时,我启动一个长时间运行的搜索操作(在UI线程上,通过UI线程计时器),并且在搜索仍然处于活动状态时,我不时地更改ICollectionView.Filter
属性,以使ListView刷新并显示搜索发现的更多匹配项。
问题是,如果用户右键单击其中一个项目,然后当搜索在后台发生时,树被刷新,然后ContextMenu消失。
我怎样才能防止这种情况的发生?
我的理论是:因为整个树都被刷新了,所以WPF无法知道该项(右键单击)与刷新后的项完全相同。从技术上讲,那个项目已经不存在了。它实际上是一个具有完全相同属性的新项目(从ListView的角度来看)。
有一些方法可以尝试补救:
-
捕获项目右键,存储项目;捕获树刷新,检查项目是否等于存储的项目;
-
将项目添加到列表的末尾,而不是刷新整个树。
-
当上下文菜单打开时,暂停刷新树