我正在使用带有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的一部分。请随时查看更多详细信息。
答案 0 :(得分:1)
“fanart
始终等于null
”意味着您最有可能重新创建拥有此字段的类的实例(我假设您的查看模型)。您应该保留对绑定的VM的引用并处理该实例。
编辑:目前我正在使用Windows 7计算机,因此无法看到您的代码。但是你正在某处移除那些玩家;您在PlayerHelper
和Player
类创建的内容。