gpt4 book ai didi

c# - 和事件(特别是 INotifyPropertyChanged)

转载 作者:行者123 更新时间:2023-11-30 14:39:17 29 4
gpt4 key购买 nike

我遇到了一个非常奇怪的问题,我似乎无法用一个小例子重现。对不起,如果这个问题有点含糊。

我有一个包含地址的人。两者都继承自实现 INotifyPropertyChanged 的​​ BaseEntity。我希望 Person 类 NotifyPropertyChanged("Address") 不仅在设置地址时,而且在该地址本身发生变化时,所以我在 Person 中的获取/设置看起来像这样:

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"); };
}
}

...
}

几个月来效果很好。

我已将 [Serializable] 添加到 Person、Address 和 BaseEntity(并将 [field: NonSerialized] 添加到 BaseEntity 的 PropertyChanged),现在当我更改 Address (somePerson.Address.Street = "something new")该地址的 PropertyChanged 的​​ invocationCount 是 0,而它曾经是 1,因此 Person 不会收到通知,并且本身不会触发 NotifyPropertyChanged("Address");

同样,如果我从 Person 中删除 [Serializable],它会起作用,而如果我将它添加回来,它就不起作用。我实际上还没有序列化任何东西,我只是添加了 [Serializable] 属性。

有什么想法吗?

最佳答案

我的猜测(受到评论中讨论的轻微刺激)是您的应用程序中某处的某些代码正在检测 [Serializable] 并决定序列化该对象。例如,缓存可能是一个可能的候选者 - 任何“深度克隆”代码都可能是。

尝试实现 ISerializable(或者只添加一个序列化回调),并添加一个断点。如果您的断点命中,请加载调用堆栈窗口并导航回堆栈以查看是什么在序列化您的对象,以及原因。

关于c# - 和事件(特别是 INotifyPropertyChanged),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6697854/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com