【发布时间】:2012-08-07 16:27:41
【问题描述】:
我在 SL 4.0 中做了一些 MVVM 工作,并且我有一个永远不会被调用的事件处理程序,尽管事件触发并且是非空的。
首先,我附加了事件处理程序。我逐步完成了这个,并注意到在添加事件处理程序之后,PropertyChanged 不再为空,但是,它的 invocationCount 仍然是 0,它的 invocationList 仍然是空的。没想到吧?
node.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(OnMonitoredDataSourceNodePropertyChanged);
接下来,我更改一个属性,并调用我的 OnPropertyChanged 方法,如下所示:
OnPropertyChanged("CheckState");
触发方法。我逐步完成,在检查 PropertyChanged 事件时,它不是预期的 NULL,但是它的 invocationCount 为 3,并且 invocationList 有 4 个对象,其中最后一个是 NULL。这对我来说毫无意义,应该只有之前分配的 1 个处理程序。相反,它是其他一些列表,并且不包括我的原始处理程序。
public void OnPropertyChanged(string propertyName) {
if (this.PropertyChanged != null) {
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
因此,PropertyChanged 被触发,但我的处理程序从未被调用。在这个问题上,我已经用头撞墙了几个小时,感谢您提供任何帮助。
【问题讨论】:
-
您是否更改了正确节点实例的“CheckState”属性?
-
是的,它应该是正确的实例,添加处理程序实际上是在一个循环中,所以所有实例都附加了。
-
“应该是正确的实例”听起来好像不是。 Make an object ID 为
node,然后在OnPropertyChanged中检查。 -
为了测试,您可以在注册事件后在下一行更改“CheckState”属性。
-
@Will,感谢您的提示,看起来它们确实是单独的实例。至于为什么......我想这是另一个问题,但至少让我确认它们是单独的实例。
标签: c# silverlight mvvm inotifypropertychanged