MAUI:从 ObservableCollection 中删除最后一项时出现问题

问题描述 投票:0回答:1

我正在使用“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 线程上都存在相同的问题。

maui observablecollection
1个回答
0
投票

我可以在 Android 上重现此问题(但在 iOS 上工作正常)。

CommentPage
MainPage
之间的唯一区别是缓存策略,它用于提高性能。

此属性的默认值为

RetainElement
。因此,您只需更改
CommentPage
中 ListView 的值即可使问题消失。

<ListView
    ...
    CachingStrategy="RecycleElement"
    SeparatorColor="#cecece"
    SelectionMode="None"
    HasUnevenRows="True">

另一个建议是您可以使用 CollectionView 而不是 ListView,目的是为 ListView 提供更灵活、更高效的替代方案。在 CollectionView 上测试没有问题。

© www.soinside.com 2019 - 2024. All rights reserved.