如何在不更改WPF中的Source属性的情况下重新加载Image?

时间:2016-05-19 18:19:37

标签: c# wpf image

假设我有一个Image对象,他的Source属性按以下方式初始化:

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是永久更改的图像(被删除并替换为具有相同名称的新的不同图像)。

我一直在使用上面提到的方法初始化Image对象Source属性,因为我在Image does not refresh in custom picture box找到了它作为支持Image刷新的方法。

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

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

欢迎任何解决方案。

修改

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

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

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

2 个答案:

答案 0 :(得分:1)

我在XAML中会有Image,在XAML中,我会将Image.Source绑定到我的viewmodel上的ImageSource类型的属性。当磁盘上的.jpg更改时,我会FileSystemWatcher更新ImageSource属性,当发生这种情况时,我会提升PropertyChanged

在XAML中,您使用Binding类更新UI控件内容/属性,以将viewmodel属性绑定到控件的依赖项属性。 Binding更新控件以响应视图模型中INotifyPropertyChanged.PropertyChangedINotifyCollectionChanged.CollectionChanged事件的引发。

答案 1 :(得分:0)

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