Создание класса, который наследует INotifyPropertyChanged - PullRequest
0 голосов
/ 10 января 2012

У меня есть очень простой класс, который имеет одно свойство и который наследует 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"));
        }
    }
}

Я пытаюсь создать экземпляр объекта SimpleClass в конструкторе для окна WPF, но получаю следующее исключение TargetInvocationException: "Исключение было брошено целью вызова ".Если я удаляю наследование INotifyPropertyChange (и любую ссылку на событие PropertyChanged), я не получаю сообщение об ошибке, и мой проект запускается без проблем.Есть идеи почему?

Ура

Ответы [ 3 ]

4 голосов
/ 10 января 2012

Вы не проверяете ноль на PropertyChanged.

если никто не слушает, тогда он будет нулевым. большинство людей защищают, чтобы слушатели события могли измениться во время мероприятия:

var listeners = PropertyChanged;
if (listeners != null)
    listeners(this, new PropertyChangedEventArgs("Property");
1 голос
/ 10 января 2012

Ничто в этом коде явно не вызывает эту ошибку.Нам нужно больше информации, чтобы быть уверенным, что происходит.Однако подсказки, которые вы дали в отношении INotifyPropertyChanged, заставляют меня поверить, что ваше событие PropertyChanged имеет значение null, и у вас нет нулевой проверки вокруг него.Вам нужно либо добавить нулевую проверку:

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

, либо убедиться, что событие никогда не будет нулевым:

public event PropertyChangedEventHandler PropertyChanged = (s, e) => { };
0 голосов
/ 10 января 2012

Попробуйте снять скобки () после имени класса:

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"));
        }
    }
}
...