我有以下课程的列表:
public class Set {
public string IconUrl { get; set; }
}
此列表绑定到ListView:
<ListView ItemsSource="{Binding Sets}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<Image Source="{Binding IconUrl}" />
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
当视图加载并且用户开始滚动时,将重复使用这些单元格,并且在下载和渲染新图像之前,图像会短暂显示上一张图像。
有没有办法在不禁用RecycleElement的情况下阻止此类行为?
答案 0 :(得分:3)
我没有尝试过此操作,但在ViewCell
您可以加入Disappearing
和Appearing
个事件。
您可能希望查看在Disappearing
事件处理程序上发布图像源,但有时这可能会在以后的某个时间发生,我想从回忆中,所以您可能还想尝试在{{1上发布图像希望在屏幕上显示之前执行的事件处理程序?
答案 1 :(得分:3)
我们已经通过手动将Image源设置为null来强制渲染新图像来解决这个问题。我们通过使用ListView的OnBindingContextChanged事件来实现这一点。希望这会有所帮助。
已编辑(已添加以下代码):
我们有这样的事情:
public class PeopleCell : ViewCell
{...
Image profileImage;
public PeopleCell()
{
profileImage = new Image
{
VerticalOptions = LayoutOptions.CenterAndExpand,
HorizontalOptions = LayoutOptions.CenterAndExpand,
BackgroundColor = Color.FromHex("f5f5f5"),
Source = ImageSource.FromFile("profile_blankimage"),
};...
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
people = BindingContext as CustomerViewModel;
if(people.Customer.Avatar != null)
profileImage.Source = ImageSource.FromUri(new Uri(people.Customer.Avatar.Url));