0

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

4

2 回答 2

0

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

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

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

于 2013-10-01T12:07:52.630 回答
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;

这对我很有效,并在更新时刷新图像。

于 2013-10-02T07:47:03.920 回答