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}"/>