)Класс, реализующий INotifyPropertyChanged. WPF
Пожалуйста, посмотрите на код ниже:
public class MyClass : INotifyPropertyChanged
{
private string _myName;
public string MyName
{
get { return _myName; }
set
{
if (_myName != value)
{
_myName = value;
OnPropertyChanged("MyName");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Объект этого класса используется в качестве DataContext для управления TextBox в WPF форме.
Идея проста: изменения, внесенные в свойство MyName этого объекта, должны быть автоматически отображены в текстовом поле. Это работает, но я не понимаю, почему.
Пожалуйста, следуйте мой образ мышления и указать, где я получаю это неправильно ...
Мы устанавливаем новое значение для MyName. Программа переходит в «сеттер», и она вызывает «OnPropertyChanged». Он переходит в «OnPropertyChanged» и проверяет, является ли свойство PropertyChanged равным null.
И это не так. И я не знаю, почему, поскольку я не добавляю никаких обработчиков событий к этому событию.
Итак ... как это работает?
Спасибо!
возможно дубликат [Как работает WPF INotifyPropertyChanged?] (Http://stackoverflow.com/questions/6789236/how-does-wpf-inotifypropertychanged-work) –
вы в идеале должны измениться, если (PropertyChanged! = NULL) PropertyChanged (это новый PropertyChangedEventArgs (propertyName)); to var handler = PropertyChanged; if (handler! = null) обработчик (это новый PropertyChangedEventArgs (propertyName)); как если бы обработчик propertychanged был изменен между проверкой if и вызовом, тогда вы получаете исключение null ref – MikeT