在我的应用程序中,我有一个按钮和一个图像。我单击该按钮,它会加载设备照片选择器,然后在选择时将图像源设置为所选图像。
如果我使用 (ImageName).Source = "(Source)" 直接通过代码设置图像,这将正常工作。
相反,我正在做的是发送该图像并将其存储在 Azure 存储中,并使用该图像的 UR 作为图像源的绑定。这工作正常。
但是我遇到的问题是当我发送图像时,我希望它更新图像源而无需在代码中设置它。我希望通过视图模型绑定来完成。
这是因为应用程序的某些部分也使用此 URI,因此当我更新 Azure 存储中的图像时,我希望它随后更新应用程序所有部分中的图像。
那么会发生什么...
- 单击按钮并从照片选择器中选择图像。
- 图像被发送到存储它的 Azure 存储。
- 图像不更新。
- 关闭应用程序。
- 加载应用程序。
- 图像现在是更新的图像。
我本质上是在寻找一种“刷新” URI 的方法。我确信这与图像缓存的工作方式有关,但我并不完全确定。如果我关闭应用程序并再次打开它,则会加载图像,但这不是一个理想的解决方案。
总结一下:我需要一种方法来更新/刷新其源在视图模型中绑定到的图像的 URI,以便它加载新添加的图像。
这是我的xml...
<ffimageloading:CachedImage HeightRequest="125"
WidthRequest="125"
x:Name="img_dp"
LoadingPlaceholder="ic_user_default.png"
ErrorPlaceholder="ic_user_default.png"
CacheDuration="0"
CacheType="None"
Source="{Binding DisplayPicture}">
</ffimageloading:CachedImage>
这是我的视图模型绑定...(UserInfo.DisplayPicture 是 URI)
private string _displayPicture { get; set; } = UserData.UserInfo.DisplayPicture;
public string DisplayPicture
{
get
{
if (_displayPicture == null)
{
return "ic_user_default";
}
else
{
return _displayPicture;
}
}
set
{
_displayPicture = value;
OnPropertyChanged(nameof(DisplayPicture));
}
}
PS: 我试过
- 有和没有 OnPropertyChanged。
- 使用 ImageSource 类型而不是字符串作为绑定类型。
- 使用 FFImageLoadings 功能清除缓存。