假设我有一个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
对象。图像更改由我控制,因此无需绑定并等待更改,相反,如果可能,我会强制图像刷新。
答案 0 :(得分:1)
我在XAML中会有Image
,在XAML中,我会将Image.Source
绑定到我的viewmodel上的ImageSource
类型的属性。当磁盘上的.jpg更改时,我会FileSystemWatcher
更新ImageSource
属性,当发生这种情况时,我会提升PropertyChanged
。
在XAML中,您使用Binding
类更新UI控件内容/属性,以将viewmodel属性绑定到控件的依赖项属性。 Binding
更新控件以响应视图模型中INotifyPropertyChanged.PropertyChanged
和INotifyCollectionChanged.CollectionChanged
事件的引发。
答案 1 :(得分:0)
我当前的解决方案是每当我删除并创建新的window.jpg
时,我使用问题中提到的Image.Source
属性初始化设置我的Image.Source
属性。