I had a situation where I needed the user to select an image to display and then move the location of the image. What I quickly found was while I was bound to the image I was holding a file lock on it that prevented me from moving it. On a BitmapImage there is a CacheOption that allows you to cache OnLoad. Unfortunately I couldn’t set this on the bindings for the Image so to get around it I had to use a converter on the Source :
public class ImageCacheConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
var path = (string)value;
// load the image, specify CacheOption so the file is not locked
var image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = new Uri(path);
image.EndInit();
return image;
}
public object ConvertBack(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException("Not implemented.");
}
}
<Image Source="{Binding Path=SmallThumbnailImageLocation,
Converter={StaticResource imagePathConverter}}"/>