ListCollectionView EditItem / CommitEdit导致不良的当前项目(选择)行为

时间:2019-02-07 09:44:12

标签: wpf

当任何项目的某些属性发生更改时,我都使用EditItem / CommitEdit进行(分组的)集合。我不想调用Refresh(),因为该集合包含许多具有相对复杂的可视树的项目,因此会减慢应用程序的速度。

在为当前(选定的)项目调用CommitEdit时,我遇到了一些奇怪的行为-在此过程中它将丢失其币种,当然我仍然可以通过MoveCurrentTo(item)将其重新设置,因此目前一切正常。但是...例如,当将一个新项目添加到集合中时,当前项目将自动更改为与集合更改前的已编辑项目(添加的项目)具有相同索引的项目(通常不会)无需调用CommitEdit就可以实现。

我使用主/详细模型,因此正确设置当前项目对我来说非常重要。有没有人绕过它?

1 个答案:

答案 0 :(得分:1)

所以我一直在研究它,调试ListCollectionView并发现一个错误(在我看来)。当对任何项目调用CommitEdit时,需要将其从集合中删除,然后再次添加到项目中,以使该项目在执行过程中可能会丢失其币种,这就是预期的结果。但是在编辑当前项目时有一种特殊情况,将某些名为_currentElementWasRemoved的私有字段设置为true。当集合下次更改(添加,删除...)时,它将查看此字段并更改当前项目,但是在那个时候当前项目应该已经更改(我可以同时多次调用fe MoveCurrentTo),所以此行为在我眼里完全没用。

因此,可以遵循以下步骤:在调用当前项目的Edit / Commit之前,将当前指针移动到另一个项目中,或者通过MoveCurrentTo(null)“取消全选”。在调用CommitEdit之后,您只需调用MoveCurrentTo(item)即可简单地将指针返回到原始项目。