绑定图像并保存缓存文件夹

时间:2013-03-04 08:44:43

标签: c# .net wpf

我有一个带有图像的ListBox:

<Image Margin="0" Source="{Binding Path=ImgUrl}" HorizontalAlignment="Stretch" Width="80" Height="80" 
                                               Tag="{Binding idStr}" OpacityMask="{x:Null}" Stretch="Fill"/>

我希望当我绑定它时,它会将图像保存到我的磁盘以解决缓存问题,下次它会检查图像是否存在并从磁盘中取出。可以这样做吗? 下载图片 - &gt;保存到磁盘 - &gt;将图像作为图像源

1 个答案:

答案 0 :(得分:1)

您可以使用专门的binding converter将每个图像保存到文件中。

下面的示例代码显示了这种转换器的基本结构。您将不得不添加一些错误处理,当然您需要定义从图像URI到本地文件路径的映射。您也可以支持System.Uri作为替代来源类型。

public class ImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var result = value;
        var imageUrl = value as string;

        if (imageUrl != null)
        {
            var buffer = (new WebClient().DownloadData(imageUrl));

            if (buffer != null)
            {
                // create an appropriate file path here
                File.WriteAllBytes("CachedImage.jpg", buffer);

                var image = new BitmapImage();
                result = image;

                using (var stream = new MemoryStream(buffer))
                {
                    image.BeginInit();
                    image.CacheOption = BitmapCacheOption.OnLoad;
                    image.StreamSource = stream;
                    image.EndInit();
                }
            }
        }

        return result;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

您可以在绑定中使用该转换器,如下所示:

<Image Source="{Binding Path=ImgUrl,
                Converter={StaticResource ImageConverter}}" ... />