[WPF C#]PropertyChanged 函数已调用但未发生更新

[WPF C#]PropertyChanged function called but update does not happen

我的 C# 代码和绑定 属性 有一个小问题。

这里我有以下xaml:

<Image Source="{Binding downloaded, Source={StaticResource itemsViewSource}}" Width="20" Height="20" Margin="5" HorizontalAlignment="Right" VerticalAlignment="Top"/>

还有我正在尝试使用的代码:

class Ressource : INotifyPropertyChanged
{
    public String downloaded        { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String info)
    {
        Debug.WriteLine("Property changed.");
        PropertyChanged(this, new PropertyChangedEventArgs(info));
    }

}

我的问题是调用了 NotifyPropertyChanged 函数(调试出现),字符串内容已更改但我没有看到我的图像出现。

有没有人有办法解决这个问题。

谢谢!

编辑: 经过多个有用的答案,但即使调用 属性Changed 函数也没有出现任何变化,我开始怀疑是否真的可以更改图像源的路径。

是否可以在更改路径时更新图片?

这里是修改后的代码:

    public class Ressource : INotifyPropertyChanged
    {
    public String downloaded
    {
        get
        {
            return _downloaded;
        }
        set
        {
            _downloaded = value;
            if (PropertyChanged != null)
                PropertyChanged(this,new PropertyChangedEventArgs("downloaded"));
        }
    }

您应该更改 属性 声明,以便可以通知视图在视图模型中更改了哪些源 属性 并更新通知的 属性 值的控件。

private String _downloaded;
public String downloaded 
{
    get  
    {
      return _downloaded;       
    }  
    set
    {
       _downloaded = value;
       NotifyPropertyChanged("downloaded");
    }
}   

C# 视图模型源代码是

class Ressource : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private String _downloaded;
    public string downloaded
    {
        get { return _downloaded; }
        set
        {
            _downloaded= value;
            if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("downloaded"));
        }
    }
}

您只能在可访问性级别为 public 时应用数据绑定。 class 的默认可访问性级别是 internal。您尚未应用可访问性级别,因此您的 class Ressource 是内部的。使其成为 public,它应该可以工作。

public class Ressource : INotifyPropertyChanged

更新 1:

如果您的图像已设置为生成操作 Resource,您可以试试这个字符串:"/AssemblyName;component/Assets/available.png".

或 .Net Framework 4.5:

"pack://application:,,,/AssemblyName;component/Assets/available.png"

AssemblyName 替换为您的程序集名称(您可以使用 Assembly.GetExecutingAssembly().GetName().Name 动态获取您的程序集名称)

将 UpdateSourceTrigger=PropertyChanged 添加到您的绑定中。

好吧,这是一个菜鸟错误,但我更喜欢说明问题出在哪里,因为我找不到任何主题来解释可能是什么问题。 但是我自己发现它......我想没有人真正需要它。总之:

我还不够清楚。 在我的示例中,我将图像源绑定到资源 class.

中的下载字段

问题是资源对象包含在另一个未实现 INotifyPropertyChanged 的​​ class 中。

一旦我这样做了,一切正常。

感谢所有试图帮助我的人,对于菜鸟和不清楚的地方,我们深表歉意。

如果有人遇到这个问题,代码如下:

部分资源:

    public class Ressource : INotifyPropertyChanged
{

    private String _downloaded;
    public String downloaded
    {
        get { return this._downloaded; }
        set
        {
            this._downloaded = value;
            raiseProperty("downloaded");
        }
    }
        public event PropertyChangedEventHandler PropertyChanged;

    private void raiseProperty(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

和容器:

   class personalSeance : INotifyPropertyChanged
{
        public ObservableCollection<Ressource> listRess { get; set; }
   public event PropertyChangedEventHandler PropertyChanged;

    private void raiseOnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

有史以来最简单的绑定:

<Image Source="{Binding downloaded}" Width="20" Height="20" Margin="3" HorizontalAlignment="Right" VerticalAlignment="Top"/>