如何clear/avoid FFImageLoading在列表项图片中的缓存
How to clear/avoid FFImageLoading's caching in list item image
我在我的项目中使用 FFImageLoading 而不是 Image
以获得占位符等更高级的功能。在我的项目中,有一个需要显示的图像列表。所以我正在使用列表视图。
<ListView x:Name="membersList" ItemTapped="Handle_ItemTappedMember" HorizontalOptions="FillAndExpand" HasUnevenRows="true" SeparatorVisibility="None" BackgroundColor="#EEEEEE" Grid.Row="0" Grid.Column="0">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout Orientation="Horizontal" Padding="5,5,5,5" HeightRequest="75" Margin="10,5,10,5" BackgroundColor="White" HorizontalOptions="FillAndExpand">
<ffimageloading:CachedImage Source="{Binding imageUrl}" x:Name="patImage" WidthRequest="60" HeightRequest="60" Aspect="AspectFill" VerticalOptions="Center">
<ffimageloading:CachedImage.Transformations>
<fftransformations:CircleTransformation />
</ffimageloading:CachedImage.Transformations>
</ffimageloading:CachedImage>
<StackLayout Spacing="3" Orientation="Vertical" VerticalOptions="Center" HorizontalOptions="FillAndExpand">
<Label FontAttributes="Bold" FontSize="14" TextColor="#212121" Text="{Binding FullName}" />
<Label FontSize="12" TextColor="#212121" Text="{Binding Relation}" />
<Label FontSize="12" TextColor="#212121" Text="{Binding Pat_ID}" />
</StackLayout>
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我的问题是我不想在这里使用缓存技术,因为我来自服务器的图像可能会在不更改 URL 的情况下被更改。
我知道如何使用 FFImageLoading 清除单个图像视图的缓存
await CachedImage.InvalidateCache(Image.Source, CacheType.All, true);
但是在ListView中如何实现呢?我正在使用绑定 属性 在此处加载图像。
经过一段时间的相同,我已经清除了我的问题。最后很简单。
在我的列表视图的绑定模型 class 中,当设置 imageUrl
时,我只是在 url.
的同时清除了缓存
private string mImageUrl { get; set; }
public string imageUrl
{
get{
return mImageUrl;
};
set{
mImageUrl = value;
await CachedImage.InvalidateCache(mImageUrl, CacheType.All, true);
};
}
这将清除以该 imageUrl 作为关键字的缓存图像。
谢谢大家的支持。编码愉快:)
await 在没有异步的情况下无法工作,所以我添加了用于清理缓存的异步方法。
private string mImageUrl { get; set; }
public string imageUrl
{
get{
return mImageUrl;
};
set{
mImageUrl = value;
cleanCache();
};
}
private async void cleanCache()
{
await CachedImage.InvalidateCache(ImageURL, CacheType.All, true);
}
我在我的项目中使用 FFImageLoading 而不是 Image
以获得占位符等更高级的功能。在我的项目中,有一个需要显示的图像列表。所以我正在使用列表视图。
<ListView x:Name="membersList" ItemTapped="Handle_ItemTappedMember" HorizontalOptions="FillAndExpand" HasUnevenRows="true" SeparatorVisibility="None" BackgroundColor="#EEEEEE" Grid.Row="0" Grid.Column="0">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout Orientation="Horizontal" Padding="5,5,5,5" HeightRequest="75" Margin="10,5,10,5" BackgroundColor="White" HorizontalOptions="FillAndExpand">
<ffimageloading:CachedImage Source="{Binding imageUrl}" x:Name="patImage" WidthRequest="60" HeightRequest="60" Aspect="AspectFill" VerticalOptions="Center">
<ffimageloading:CachedImage.Transformations>
<fftransformations:CircleTransformation />
</ffimageloading:CachedImage.Transformations>
</ffimageloading:CachedImage>
<StackLayout Spacing="3" Orientation="Vertical" VerticalOptions="Center" HorizontalOptions="FillAndExpand">
<Label FontAttributes="Bold" FontSize="14" TextColor="#212121" Text="{Binding FullName}" />
<Label FontSize="12" TextColor="#212121" Text="{Binding Relation}" />
<Label FontSize="12" TextColor="#212121" Text="{Binding Pat_ID}" />
</StackLayout>
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我的问题是我不想在这里使用缓存技术,因为我来自服务器的图像可能会在不更改 URL 的情况下被更改。
我知道如何使用 FFImageLoading 清除单个图像视图的缓存
await CachedImage.InvalidateCache(Image.Source, CacheType.All, true);
但是在ListView中如何实现呢?我正在使用绑定 属性 在此处加载图像。
经过一段时间的相同,我已经清除了我的问题。最后很简单。
在我的列表视图的绑定模型 class 中,当设置 imageUrl
时,我只是在 url.
private string mImageUrl { get; set; }
public string imageUrl
{
get{
return mImageUrl;
};
set{
mImageUrl = value;
await CachedImage.InvalidateCache(mImageUrl, CacheType.All, true);
};
}
这将清除以该 imageUrl 作为关键字的缓存图像。 谢谢大家的支持。编码愉快:)
await 在没有异步的情况下无法工作,所以我添加了用于清理缓存的异步方法。
private string mImageUrl { get; set; }
public string imageUrl
{
get{
return mImageUrl;
};
set{
mImageUrl = value;
cleanCache();
};
}
private async void cleanCache()
{
await CachedImage.InvalidateCache(ImageURL, CacheType.All, true);
}