实例化一个继承INotifyPropertyChanged的类

时间:2012-01-10 00:21:34

标签: wpf inotifypropertychanged instantiation

我有一个非常简单的类,它有一个属性并且继承了INotifyPropertyChanged:

class SimpleClass:INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private string _property;
    public string Property
    {
        get { return _property; }
        set
        {
            _property = value; 
            PropertyChanged(this, new PropertyChangedEventArgs"Property"));
        }
    }
}

我尝试在WPF窗口的构造函数中实例化一个SimpleClass对象,但是我得到以下TargetInvocationException:“调用的目标抛出了异常”。 如果我删除INotifyPropertyChange继承(以及对PropertyChanged事件的任何引用),那么我没有得到错误,我的项目运行没有任何问题。有什么想法吗?

干杯

3 个答案:

答案 0 :(得分:4)

您没有在PropertyChanged上检查是否为空。

如果没有人在听,那么它将为空。大多数人都会保护事件听众在活动期间改变:

var listeners = PropertyChanged;
if (listeners != null)
    listeners(this, new PropertyChangedEventArgs("Property");

答案 1 :(得分:1)

此代码中没有任何内容显然导致该错误。我们需要更多信息以确定发生了什么。但是,您提供的有关INotifyPropertyChanged的提示让我相信它的PropertyChanged事件为空,并且您没有对它进行空检查。您需要添加空检查:

    set
    {
        _property = value; 
        if (PropertyChanged != null)
          PropertyChanged(this, new PropertyChangedEventArgs"Property"));
    }

或确保事件永远不为空:

public event PropertyChangedEventHandler PropertyChanged = (s, e) => { };

答案 2 :(得分:0)

尝试删除类名后的方括号():

public class SimpleClass:INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private string _property;
    public string Property
    {
        get { return _property; }
        set
        {
            _property = value; 
            PropertyChanged(this, new PropertyChangedEventArgs("Property"));
        }
    }
}