在 Xamarin Forms ListView 中停止单元格回收

Stop Cell recycling in Xamarin Forms ListView

我有一个相对简单的 xamarin 表单应用程序,它有一个带有自定义单元格的 ListView。在这些单元格中,有一个图像。我遇到的问题是这个。当我滚动 ListView 时,我可以在加载新图像之前暂时看到之前单元格中的图像。

我已尝试将 ListView 的 ListViewCachingStrategy 设置为所有可能的值,但问题仍然存在。

有没有办法停止回收?我知道这是一个性能问题,但列表并不大。当然,除非有更好的方法来解决这个图像问题

我还没有明确地尝试过这个,但是如果你在 ListView 上附加 ItemDisappearing 事件。

然后获取 e.Item 并清除图像,这样它应该用空白更新单元格中的图像。

然后当它再次出现时,在加载新内容之前它应该是空白的。

我们对这个问题所做的是在用户滚动时将绑定图像设置为空值,这会强制图像再次呈现,这不是一个好的解决方案,但它有效。

您可以覆盖 OnBindingContextChanged ViewCell 的方法,而不是使用绑定。类似的东西:

protected override void OnBindingContextChanged()
{
    image.Source = null;

    base.OnBindingContextChanged();

    var item = BindingContext as YourItemType;

    if (item == null)
        return;

    image.Source = item.YourImageSource;
}

在此处阅读更多内容:https://developer.xamarin.com/guides/xamarin-forms/user-interface/listview/performance/#RecycleElement