PropertyChanged总是被解雇

时间:2014-11-30 10:16:55

标签: c# windows-phone-8 inotifypropertychanged win-universal-app

我正在使用带有INotifyPropertyChanged的标准通知模式。这是我的示例属性:

private string fanart;
public string Fanart
{
    get { return fanart; }
    set
    {
        if (fanart != value)
        {
            fanart = value;
            NotifyPropertyChanged("Fanart");
        }
    }
}

在这里,如果新值等于当前值,我希望setter跳过所有内容。但是,当我使用调试器检查时,fanart总是等于null,因此,事件总是被触发。提交(和财产)的任何原因是否为空?

编辑:此属性是名为PlayerItem的类的一部分。 PlayerItem是另一个班级PlayerState的一部分。所有这些类都从NotifyBase延伸。方法RefreshPlayerState会定期刷新PlayerState。我刚刚注意到每次刷新播放器状态时都会创建PlayerItem的新实例。可能导致这种情况的原因是什么?

Edit2:由于我从JSON响应反序列化对象,因此预计会创建新实例。现在,如果较旧的值等于从JSON反序列化的值,如何阻止setter设置值? <{1}}将始终返回true,因为两者都是不同的对象,尽管包含的数据是相同的。

此代码是项目here的一部分。请随时查看更多详细信息。

1 个答案:

答案 0 :(得分:1)

fanart始终等于null”意味着您最有可能重新创建拥有此字段的类的实例(我假设您的查看模型)。您应该保留对绑定的VM的引用并处理该实例。

编辑:目前我正在使用Windows 7计算机,因此无法看到您的代码。但是你正在某处移除那些玩家;您在PlayerHelperPlayer类创建的内容。