INotifyPropertyChanged Event Not Calling Event Handler
本文关键字:Event Handler Calling Not INotifyPropertyChanged | 更新日期: 2024-11-06 17:44:26
我在SL 4.0中做了一些MVVM工作,我有一个事件处理程序,尽管事件触发并且非null,但它永远不会被调用。
首先,我附加事件处理程序。 我逐步完成此操作,并注意到在添加事件处理程序后,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 被触发,但我的处理程序从未被调用。 我已经把头撞在墙上几个小时了,任何帮助都是值得赞赏的。
你的代码在问题中出现时没有任何问题。 它建议 1) 您的代码与此处表示的不符,或者 2) 您在第一部分中将侦听器添加到的实例不是您要触发OnPropertyChanged
的实例。 2号是我的赌注。
为了对此进行测试,您应该调试应用程序,在添加侦听器的位置放置一个断点,并在触发OnPropertyChanged
的位置放置一个断点。
在 Visual Studio 中,当命中第一个断点时,在 node
变量引用的实例上创建一个对象 ID。 让您的应用程序继续执行。
当第二个断点命中 OnPropertyChanged
时,检查 this
上的对象 ID。 您将了解实例是否相同。
在所有调试中,确定您的假设是什么。 因为这就是你的错误所在。