我在SL 4.0中做了一点MVVM工作,并且我有一个事件处理程序,永远不会被调用,尽管事件触发,并且是非空的。INotifyPropertyChanged事件没有调用事件处理程序
首先,我附加了事件处理程序。我介绍了这一点,并注意到在添加事件处理程序后,该PropertyChanged不再为null,但是它的invocationCount仍然为0,它的invocationList仍然为空。这不是正确的?
node.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(OnMonitoredDataSourceNodePropertyChanged);
接下来,我更改属性,并叫我OnPropertyChanged方法,像这样:
OnPropertyChanged("CheckState");
时触发的方法。我逐步了解了这一点,并且在检查PropertyChanged事件时,它是预期的NOT NULL,但它具有3的invocationCount,并且invocationList有4个对象,最后一个是NULL。这对我来说没有意义,应该只有以前分配的1个处理程序。相反,它的一些其他名单,并没有包括我原来的处理程序。
public void OnPropertyChanged(string propertyName) {
if (this.PropertyChanged != null) {
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
因此,PropertyChanged被触发,但我的处理程序永远不会被调用。我一直在这块墙上敲打我的头几个小时,任何帮助表示赞赏。
您是否更改了正确节点实例的“CheckState”属性? – Andre 2012-08-07 16:40:34
是的,它应该是正确的实例,添加处理程序实际上是在一个循环中,因此所有实例都被连接。 “ – 2012-08-07 17:14:12
”应该是正确的实例“听起来好像不是。 [为节点创建对象ID](http://blogs.msdn.com/b/zainnab/archive/2010/03/04/make-objectid-vstipdebug0015.aspx),然后在'OnPropertyChanged'中检查它。 – Will 2012-08-07 19:01:08