WPF列表显示图片,删除列表同时删除文件的时候显示文件被占用无法删除
原因:因为列表里面的每一项都直接引用了文件路径,所以文件被锁住了,你想删也删不了
解决,数据加载的时候不要直接使用文件原地址,使用BitmapImage,并且设置CacheOption=OnLoad,读取到内存,读完马上释放
具体做法,在你的返回数据的实体类里面加一个BitmapImage字段和LoadImage方法,然后在页面列表数据加载的时候执行LoadImage方法,前台正常 ImageBrush 显示即可
private ImageSource _imageSource;
public ImageSource ImageSource
{
get => _imageSource;
set => SetProperty(ref _imageSource, value);
}
// 加载图片方法
public void LoadImage(string path)
{
var bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = new Uri(path, UriKind.Absolute);
bitmap.CacheOption = BitmapCacheOption.OnLoad; // 非常关键
bitmap.EndInit();
bitmap.Freeze(); // 让图片可以跨线程访问,性能好
ImageSource = bitmap;
}
前台显示
<ImageBrush ImageSource="{Binding ImageSource}"/>

浙公网安备 33010602011771号