在 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;
}
我有一个相对简单的 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;
}