我遇到了一个非常奇怪的问题,我似乎无法用一个简单的例子来重现。如果这个问题有点模糊,对不起。
我有一个包含地址信息的人员类(Person),和一个继承自BaseEntity并实现了INotifyPropertyChanged接口的地址类(Address)。我希望在设置Address属性时,Person类能够触发NotifyPropertyChanged("Address")事件,并且在Address本身发生更改时也能触发该事件,因此我的Person类的get/set方法如下:
class Person : BaseEntity
{
private Address address;
public Address Address
{
get { return address; }
set
{
address = value;
NotifyPropertyChanged("Address");
// propagate changes in Address to changes in Person
address.PropertyChanged += (s, e) => { NotifyPropertyChanged("Address"); };
}
}
...
}
这个方法已经运行了几个月,现在我给Person、Address和BaseEntity添加了[Serializable](并且在BaseEntity的PropertyChanged中添加了[field: NonSerialized]),但是当我更改Address时(例如somePerson.Address.Street =“something new”),该地址的PropertyChanged的调用计数为0,而以前它是1,因此Person没有得到通知,并且不会触发NotifyPropertyChanged("Address")。
如果我从Person中删除[Serializable],它可以正常工作,如果我重新添加它,则无法正常工作。实际上我还没有序列化任何东西,我只是添加了[Serializable]属性。
有什么想法吗?