防止在ListViewItem上的ContextMenu在更改过滤器时消失

本文关键字:过滤器 消失 ContextMenu ListViewItem 上的 | 更新日期: 2023-09-27 18:05:34

我有一个ListView和TextBox输入搜索文本。

当用户搜索某些文本时,我启动一个长时间运行的搜索操作(在UI线程上,通过UI线程计时器),并且在搜索仍然处于活动状态时,我不时地更改ICollectionView.Filter属性,以使ListView刷新并显示搜索发现的更多匹配项。

问题是,如果用户右键单击其中一个项目,然后当搜索在后台发生时,树被刷新,然后ContextMenu消失。

我怎样才能防止这种情况的发生?

防止在ListViewItem上的ContextMenu在更改过滤器时消失

我的理论是:因为整个树都被刷新了,所以WPF无法知道该项(右键单击)与刷新后的项完全相同。从技术上讲,那个项目已经不存在了。它实际上是一个具有完全相同属性的新项目(从ListView的角度来看)。

有一些方法可以尝试补救:

  • 捕获项目右键,存储项目;捕获树刷新,检查项目是否等于存储的项目;

  • 将项目添加到列表的末尾,而不是刷新整个树。

  • 当上下文菜单打开时,暂停刷新树