我试图更新绑定到实现INotifyPropertyChanged
的类的图像控件中的图像。我已经尝试了大多数与刷新位图缓存相关的方法,以便图像可以刷新,但似乎没有一个适用于我的情况。图像控件在xaml文件中定义为:<Image Source="{Binding Chart}" Margin="0 0 0 0"/>
并且在课程背后的代码中是:
private ImageSource imagechart = null;
public ImageSource Chart
{
get
{
return imagechart;
}
set
{
if (value != imagechart)
{
imagechart = value;
NotifyPropertyChanged("Chart");
}
}
}
在事件发生后,我现在使用以下代码设置图像:
c.Chart = image;
当我现在运行我的应用程序时,它将显示图像但在应用程序运行期间我更新图像但是调用此c.Chart = image;
会显示初始图像。我开始明白WPF会缓存图像,但声称要解决此问题的所有方法都适用于我。其中一个对我不起作用的解决方案是Problems overwriting (re-saving) image when it was set as image source
答案 0 :(得分:0)
尝试将Image
属性的返回类型更改为Uri
。 Source Property上的TypeConverter应该完成其余的工作。如果这不起作用,请验证资源是否已实际更改。
您可以使用Assembly.GetManifestResourceStreams从程序集中读取资源并解析字节。然后使用File.WriteAllBytes手动将它们保存到输出目录,看看它是否具有预期的图像。
据我所知,Application Ressources(嵌入到程序集中)无法在运行时更改(?)。您正在引用程序集资源而不是包uri的输出资源。
答案 1 :(得分:0)
谢谢大家通过他们的输入,我终于找到了解决这个问题的方法。所以我的xaml仍然保持绑定为<Image Source="{Binding Chart}" Margin="0 0 0 0"/>
,但在后面的代码中,我更改了类属性图表以返回位图,如下所示:
private BitmapImage image = null;
public BitmapImage Chart
{
get
{
return image;
}
set
{
if (value != image)
{
image = value;
NotifyPropertyChanged("Chart");
}
}
}
这个类介意你实现INotifyPropertyChanged
。在我设置图像的位置,我现在正在使用此代码:
BitmapImage img = new BitmapImage();
img.BeginInit();
img.CacheOption = BitmapCacheOption.OnLoad;
img.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
//in the following code path is a string where i have defined the path to file
img.UriSource = new Uri(string.Format("file://{0}",path));
img.EndInit();
c.Chart = img;
这对我很有用,并在更新后刷新图像。