У вас могут возникнуть проблемы с многопоточностью, если метод OnPropertyChanged
вызывается из разных потоков. Возможно, в конечном итоге выдается NullReferenceException
, если в другом потоке параллельно происходит какое-либо отписывание от события PropertyChanged
. Когда вы изначально проверяете PropertyChanged
на «не ноль», это может выглядеть как «истина», но следующая строка, когда вы пытаетесь вызвать обработчик, может быть «ноль». Так что правильный и рекомендуемый способ сделать это показан ниже. Также Вы можете усовершенствовать метод, добавив [CallerMemberNameAttribute]
к аргументу propertyName
, чтобы избежать опечаток при передаче значения для propertyName. С атрибутом, указанным в аргументе, вам не нужно передавать имя свойства для изменяемого свойства. Вам просто нужно вызвать метод без аргументов, и атрибут позаботится о передаче соответствующего значения имени свойства.
protected virtual void OnPropertyChanged([CallerMemberName]string propertyName=null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}