Qu'est-ce que [NotifyPropertyChangedInvocator]en C# lorsque les instruments INotifyPropertyChanged?
je vois deux types de mise en œuvre de INotifyPropertyChanged
Le premier:
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)); } } }
La seconde:
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)); } } }
dans le 2e, vous voyez qu'il y a un attribut supplémentaire [NotifyPropertyChangedInvocator]
la méthode OnPropertyChanged
Dans mon cas, les deux se comporte de la même chose mais quoi, pourquoi et quand utiliser cette [NotifyPropertyChangedInvocator]
, quels sont les avantages? J'ai cherché sur internet mais je n'ai pas trouvé de bonne réponse.
2 réponses
c'est un attribut Resharper de leur Annotations - conçus pour vous donner un avertissement, puis votre code suspect :)
Considérez ceci:
public class Foo : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void NotifyChanged(string propertyName) { ... }
private string _name;
public string Name {
get { return _name; }
set {
_name = value;
NotifyChanged("LastName");//<-- warning here
}
}
}
[NotifyPropertyChangedInvocator]
attribut sur l' NotifyChanged
méthode Resharper vous donnera un avertissement, que vous invoquez la méthode avec une (probablement) Mauvaise Valeur.
Parce que Resharper sait maintenant!--18--> méthode doit être appelée à changer notification, il vous aidera à convertir des propriétés normales en propriétés avec notification de changement:
Convertir en ceci:
public string Name
{
get { return _name; }
set
{
if (value == _name) return;
_name = value;
NotifyChange("Name");
}
}
Cet exemple est tiré de la documentation sur le [NotifyPropertyChangedInvocator]
l'attribut trouvé ici:
NotifyPropertyChangedInvocator
est un Resharper fonctionnalité.
Vous pouvez simplement le supprimer à partir de votre code pour qu'il fonctionne
question similaire a été posée ici:
quelqu'un sait-il comment faire pour obtenir l' [NotifyPropertyChangedInvocator]