Если вы можете назначить DataContext перед вызовом InitializeComponent (из MainWindow или UserControl), вы можете явно создать BitmapImage в XAML и установить его CacheOption
в OnLoad
.Фреймворк сразу же загрузит файл и не будет держать его открытым.
<Image>
<Image.Source>
<BitmapImage UriSource="{Binding ImageUri}" CacheOption="OnLoad"/>
</Image.Source>
</Image>
В случае, если свойство DataContext или ImageUri должно быть установлено после InitializeComponent, вы можете добавить свойство типа ImageSource
public ImageSource Image
{
get { return BitmapFrame.Create(
ImageUri, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); }
}
или byte[]
:
public byte[] Image
{
get { return File.ReadAllBytes(ImageUri.LocalPath); }
}
и привязать к нему, как:
<Image Source="{Binding Image}"/>
или асинхронно, чтобы увеличить скорость отклика пользовательского интерфейса:
<Image Source="{Binding Image, IsAsync=True}"/>