I see two types of implementation of INotifyPropertyChanged
The first one:
public abstract class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } } }
The second one:
public abstract class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } } }
In 2nd one you see there is an extra attribute [NotifyPropertyChangedInvocator]
on the method OnPropertyChanged
In my case both behaves same but what, why and when to use this [NotifyPropertyChangedInvocator]
, what are benefits of this? I've searched on internet but couldn't find any good answer.
It is a Resharper attribute from their Annotations - designed to give you warning then your code looks suspicious :)
Consider this:
With the
[NotifyPropertyChangedInvocator]
attribut on theNotifyChanged
method Resharper will give you a warning, that you are invoking the method with a (presumably) wrong value.Because Resharper now knows that method should be called to make change notification, it will help you convert normal properties into properties with change notification:
Converting it into this:
This example is from the documentation on the
[NotifyPropertyChangedInvocator]
attribute found here:The
NotifyPropertyChangedInvocator
is a Resharper feature.You can simply remove it from your code in order for it to work
Similar question been asked here:
does anyone know how to get the [NotifyPropertyChangedInvocator]