You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

绑定ImageSource至Image控件不显示,CarouselView切换项复用缓存图片异常

问题原因与解决方案

核心根因

你的问题出在StreamImageSource的流复用逻辑不符合要求:
ImageSource.FromStream传入的Func<Stream>委托,需要每次调用时都返回一个全新、指针在起始位置的可读流。你之前的代码将同一个MemoryStream实例反复传入,第一次图片加载完成后,流的读取指针已经移动到末尾,后续再次读取该流时无法拿到任何数据,CachedImage加载失败就会保留上一次成功加载的图片,因此看起来始终显示同一张。

修复方案

推荐你在模型中存储图片二进制数据而非ImageSource,每次需要时动态生成全新的流:

修改模型定义

public class FraseClass : ViewModelBase
{
     private byte[] _imgData;
     public byte[] ImgData
     {
         get => _imgData;
         set
         {
            _imgData = value;
            RaisePropertyChanged(nameof(ImgData));
            RaisePropertyChanged(nameof(ImgSource));
         }
     }

     // 每次访问都返回新的ImageSource,内置的流都是全新可读的
     public ImageSource ImgSource => ImgData == null ? null : ImageSource.FromStream(() => new MemoryStream(ImgData));
}

修改切换逻辑

private void CurrentItemChanged (object sender, CurrentItemChangedItemArgs e)
{
    var currentItem = ListaFrasi[Index];
    if (currentItem.ImgData == null)
    {
         string LinkImg = "ftp://epiz_27426656@ftpupload.net/htdocs/ImgSfondo/" + DateTime.Now.AddDays(-Index).DayOfYear + ".jpg";
         // 注意原代码的WebLcient是拼写错误,应为WebClient
         byte[] ImgByte = new WebClient().DownloadData(LinkImg);
         currentItem.ImgData = ImgByte;
    }
    ImgFrase.Source = currentItem.ImgSource;
}

优化方案(推荐)

你用的ff:CachedImage本身就支持远程资源加载与自动缓存,完全不需要手动写下载逻辑,直接传入Uri即可,实现更简单性能也更好:

简化模型定义

public class FraseClass : ViewModelBase
{
     private Uri _imgUri;
     public Uri ImgUri
     {
         get => _imgUri;
         set
         {
            _imgUri = value;
            RaisePropertyChanged(nameof(ImgUri));
         }
     }
}

简化切换逻辑

private void CurrentItemChanged (object sender, CurrentItemChangedItemArgs e)
{
    var currentItem = ListaFrasi[Index];
    if (currentItem.ImgUri == null)
    {
         string LinkImg = "ftp://epiz_27426656@ftpupload.net/htdocs/ImgSfondo/" + DateTime.Now.AddDays(-Index).DayOfYear + ".jpg";
         currentItem.ImgUri = new Uri(LinkImg);
    }
    ImgFrase.Source = currentItem.ImgUri;
}

内容的提问来源于stack exchange,提问作者trecchino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 08:24:02