You are correct, the verification must be performed, and their example is incorrect.
Below is the standard code.
private void NotifyPropertyChanged(String propertyName) { var handler = PropertyChanged; if (handler != null) { handler (this, new PropertyChangedEventArgs(propertyName)); } }
Edit: Further explanation of why this is necessary (and why it works)
In the MS example, they perform a null check directly in the PropertyChanged and then call it. Thus, the PropertyChanged property could become null between the null check and the call. By assigning a local variable to a delegate, we can guarantee that we will keep a reference to the delegate and that it cannot change between null checking and invocation.
source share