更新图像控件中的图像

本文关键字:图像 控件 更新 | 更新日期: 2023-09-27 18:33:35

>im 尝试更新绑定到实现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 缓存图像,但所有声称解决此问题的方法都对我有用。 对我不起作用的解决方案之一是 将图像设置为图像源时覆盖(重新保存)图像时出现问题

更新图像控件中的图像

尝试将Image属性的返回类型更改为 Uri 。源属性上的类型转换器应该完成其余的工作。如果这不起作用,请验证资源是否已实际更改。

可以使用 Assembly.GetManifestResourceStreams 从程序集读取资源并解析字节。然后手动将它们与File.WriteAllBytes保存到输出目录,看看它是否具有预期的图像。

据我所知,应用程序资源(嵌入到程序集中)在运行时无法更改(?您引用的是程序集资源,而不是带有包 uri 的输出资源。

谢谢大家的输入,因为通过他们,我终于找到了解决这个问题的方法。 所以我的 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;

这对我来说效果很好,并在更新时刷新图像。