首先,目标是C#。
我希望自定义对象能够在对象的属性更改时通知侦听器(其他类)。搜索的明显解决方案是INotifyPropertyChanged,但我不确定这是答案。
有 2 个或更多类可以更改对象。为简单起见,假设一个是网络,一个是文本框。他们更改 myObject 中的一个属性,这会通过 setter 触发 INotifyPropertyChanged。
关键是,如果网络类启动了更改,则我不希望通知网络类,如果文本框启动更改,则我只希望通知网络,而不是文本框。
我不敢相信有人以前没有遇到过这种情况,但我找不到任何与这种情况相匹配的东西。
解决这个问题的最佳方法是什么?
编辑,因为它被关闭为重复,但建议的答案都与问题无关。
多个"setter"类可以对任意数量的对象进行更改,然后触发对感兴趣的"侦听器"类的通知。侦听器类是 setter 类。我需要一种方法来仅通知未设置属性的侦听器。否则我会得到一个无休止的循环!
你可以像这样使用调用器:
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged(string propertyName)
{
StackTrace stackTrace = new StackTrace();
var stackFrames = stackTrace.GetFrames().Skip(1);
foreach (var d in PropertyChanged?.GetInvocationList() ?? new Delegate[0])
{
if (stackFrames?.Any(f => f.GetMethod().ReflectedType.GUID == d.Target.GetType().GUID)??false) continue;
d.Method.Invoke(d,new object[]{ d, new PropertyChangedEventArgs(propertyName) });
}
}
或者在网络类中检查属性的当前值是否不等于设置的值。