INotifyPropertyChanged事件未调用事件处理程序

时间:2012-08-07 16:27:41

标签: c# silverlight mvvm inotifypropertychanged

我在SL 4.0中做了一些MVVM工作,并且我有一个永远不会被调用的事件处理程序,尽管事件被触发,并且非空。

首先,我附上了事件处理程序。我逐步完成了这一点,并注意到在添加事件处理程序之后,PropertyChanged不再为null,但是,它的invocationCount仍为0,并且它的invocationList仍为null。这不是预期的吗?

node.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(OnMonitoredDataSourceNodePropertyChanged);

接下来,我更改了一个属性,并调用我的OnPropertyChanged方法,如下所示:

OnPropertyChanged("CheckState");

激发方法。我逐步完成,并在检查PropertyChanged事件时,它是NOT NULL,这是预期的,但它有一个invocationCount为3,而invocationList有4个对象,最后一个是NULL。这对我来说毫无意义,应该只有先前分配的1个处理程序。相反,它的一些其他列表,以及一个不包括我原始处理程序的列表。

public void OnPropertyChanged(string propertyName) {
        if (this.PropertyChanged != null) {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

因此,PropertyChanged被触发,但我的处理程序从未被调用过。我一直在墙上撞墙几个小时,感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

问题中出现的代码没有任何问题。它会建议1)您的代码不在此处表示,或者2)您在第一部分中添加侦听器的实例不是您正在触发的实例OnPropertyChanged。 2号是我的赌注。

为了对此进行测试,您应该调试应用程序,在添加侦听器的位置放置断点,以及触发OnPropertyChanged的位置。

在Visual Studio中,当第一个断点被点击时,node变量引用的实例上的make an object ID。让您的应用程序继续执行。

当第二个断点在OnPropertyChanged中命中时,检查this上的对象ID。你会发现实例是否相同。

在调试的所有事情中,确定您的假设是什么。因为那就是你的错误所在。