我正在使用“ObservableCollection”保存评论。当我删除评论时,我将获取已删除的评论 ID 并从“ObservableCollection”中删除该评论。
我的问题是,如果我删除最后一条评论,所有以前的评论都会从用户界面中消失,只显示最初的评论。当我重新打开页面或删除任何其他评论时,消失的先前评论就会回来。
我的代码:
foreach (var item in customerCommentList)
{
if (item.parentComment.supportItemComments.commentId == deleteCommentId)
{
customerCommentList.Remove(item);
break;
}
}
这里
customerCommentList
是集合,我从中删除了数据。从集合中删除项目是否有任何问题? net 7.0 有任何已知问题吗?
更新
我创建了一个更优化的演示,包含更多发现并上传到这里。
在此演示中,我添加了 2 页,一页是
CommentPage
,另一页是 MainPage
。在这两个页面上,我使用相同的逻辑在 UI 上显示项目并从 UI 中删除项目。在 MainPage
上一切正常,在 CommentsPage
上我面临着同样的问题。这两个页面的 UI 不同,所以我认为问题与 UI 布局有关。不幸的是我无法触发它。
我怀疑这是由于从后台线程调用函数所致,因此我验证了这一点,并且在后台线程和主 UI 线程上都存在相同的问题。
我可以在 Android 上重现此问题(但在 iOS 上工作正常)。
CommentPage
和MainPage
之间的唯一区别是缓存策略,它用于提高性能。
此属性的默认值为
RetainElement
。因此,您只需更改 CommentPage
中 ListView 的值即可使问题消失。
<ListView
...
CachingStrategy="RecycleElement"
SeparatorColor="#cecece"
SelectionMode="None"
HasUnevenRows="True">
另一个建议是您可以使用 CollectionView 而不是 ListView,目的是为 ListView 提供更灵活、更高效的替代方案。在 CollectionView 上测试没有问题。