C# 如何在不更改WPF中的源属性的情况下重新加载图像?

C# 如何在不更改WPF中的源属性的情况下重新加载图像?,c#,wpf,image,C#,Wpf,Image,假设我有一个图像对象,其源属性按以下方式初始化: BitmapImage source = new BitmapImage(); source.BeginInit(); source.CacheOption = BitmapCacheOption.OnLoad; source.CreateOptions = BitmapCreateOptions.IgnoreImageCache; source.UriSource = new Uri("C:\\Temp\\tech\\window.jpg");

假设我有一个
图像
对象,其
属性按以下方式初始化:

BitmapImage source = new BitmapImage();
source.BeginInit();
source.CacheOption = BitmapCacheOption.OnLoad;
source.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
source.UriSource = new Uri("C:\\Temp\\tech\\window.jpg");
source.EndInit();
image.Source = source; // image object automatically initialized in the window construction.
正如您可以隐式看到的,
window.jpg
是一个永久更改的图像(被删除并替换为具有相同名称的新的不同图像)

我一直在使用上述方法初始化
图像
对象
属性,因为我在找到它作为支持
图像
刷新的方法

但是,在程序运行时删除和替换
window.jpg
时,
图像
对象仍然显示初始化其
属性(缓存)时加载的图像

似乎
图像
对象忽略了
BitmapCreateOptions.IgnoreImageCache
值,并且在新图像替换先前删除的图像时不会刷新图像

任何解决方案都将受到欢迎

编辑

我不想更改文件名,因为我需要冗余地查找不存在的随机名称,而不是仅仅刷新图像以再次加载相同的
源文件

我不想更改
Source
属性值,因为我不更改文件名


理想的解决方案是每次图像文件更改时更新
图像
对象。图像更改由我控制,因此无需绑定并等待更改,相反,如果可能,我将强制图像刷新。

我将在XAML中有一个
图像
,在XAML中,我将
image.Source
绑定到viewmodel上类型为
ImageSource
的属性。当磁盘上的.jpg发生更改时,我会让一个
FileSystemWatcher
更新
ImageSource
属性,并在发生更改时引发
PropertyChanged


在XAML中,通过使用
Binding
类将viewmodel属性绑定到控件的依赖项属性,可以更新UI控件内容/属性。
绑定更新控件以响应viewmodel中引发的
INotifyPropertyChanged.PropertyChanged
INotifyCollectionChanged.CollectionChanged
事件

我当前的解决方案是,每当我删除并创建一个新的
窗口.jpg
,我就用问题中提到的
Image.Source
属性初始化设置我的
Image.Source
属性。

有什么解决方案吗?我看到的唯一问题是您要求重新加载
图像
,而不更改
属性的值。我认为这是不可能的,除非您使用可写位图对象(例如,
writeablebitmap
RenderTargetBitmap
,等等)。但是更改
属性有什么错呢?您是否发现当您更改
Source
属性时,您的图像仍然没有得到更新?请提供一个能够可靠地再现您的问题的好代码,以及该代码的作用和您希望它做什么的精确描述。@PeterDuniho,感谢您的重播。请检查我的编辑。非常感谢你的回答,它似乎工作得很好。不幸的是,当我阅读的时候,我宁愿不用它。谢谢,我没有意识到它坏了。