Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PropertyChanged始终被激发_C#_Windows Phone 8_Inotifypropertychanged_Win Universal App - Fatal编程技术网

C# PropertyChanged始终被激发

C# PropertyChanged始终被激发,c#,windows-phone-8,inotifypropertychanged,win-universal-app,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");

我正在使用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设置该值<代码>myObj!=值将始终返回true,因为尽管包含的数据相同,但两者都是不同的对象

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

fanart
始终等于
null
”表示您很可能正在重新创建拥有此字段的类的实例(我假定它是您的视图模型)。您应该保留对绑定VM的引用,并处理该实例


编辑:目前我正在使用Windows 7计算机,因此无法看到您的代码。但是你正在把那些玩家转移到某个地方;您在
PlayerHelper
Player
类中创建的那些。此代码中没有问题,有更多详细信息吗?如何绑定它?一个非常简单的测试是
o.Fanart=“abc”;o、 Fanart=“abc”
并查看触发
属性更改的频率。在这种情况下,您会发现事件不会引发两次。我猜您正在创建类的新实例,这些新实例自然没有任何默认的
Fanart
值。您为其提供链接的代码不包含
if(…)
语句。此外,搜索项目后发现您从未显式设置此属性。仅反序列化。@akshay2000如果我没记错,反序列化从默认构造函数实例化对象,然后使用反射指定属性。因此,在反序列化时,您的属性将从null变为value。正确!我正在从JSON响应进行反序列化。所以,这是意料之中的。现在,问题是如何确保setter不设置值?由于旧对象与新对象不同,
myObj!=值
将始终返回true。@akshay2000这取决于您的实现,您可能需要检查所有属性等。。。但是你的问题已经完全回答了,你可以记下来。