2

在我的应用程序中,我有一个按钮和一个图像。我单击该按钮,它会加载设备照片选择器,然后在选择时将图像源设置为所选图像。

如果我使用 (ImageName).Source = "(Source)" 直接通过代码设置图像,这将正常工作。

相反,我正在做的是发送该图像并将其存储在 Azure 存储中,并使用该图像的 UR 作为图像源的绑定。这工作正常。

但是我遇到的问题是当我发送图像时,我希望它更新图像源而无需在代码中设置它。我希望通过视图模型绑定来完成。

这是因为应用程序的某些部分也使用此 URI,因此当我更新 Azure 存储中的图像时,我希望它随后更新应用程序所有部分中的图像。

那么会发生什么...

  1. 单击按钮并从照片选择器中选择图像。
  2. 图像被发送到存储它的 Azure 存储。
  3. 图像不更新。
  4. 关闭应用程序。
  5. 加载应用程序。
  6. 图像现在是更新的图像。

我本质上是在寻找一种“刷新” 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 功能清除缓存。
4

0 回答 0