2013-03-04 5 views
0

У меня есть ListBox с изображением:Bind изображения и сохранить для папки кэша

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

И я хочу, чтобы, когда я привязать его будет сохранить изображение на мой диск для вопросов кэша, и в следующий раз он будет проверьте, существует ли изображение и берет его с диска. Можно сделать что-то подобное? Скачать картинку-> Сохранить на диск -> сделать изображение в качестве источника изображения

ответ

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}}" ... /> 
Смежные вопросы