Maison >développement back-end >C++ >Comment déclencher des événements pour les changements de valeur de propriété en C# ?
Déclencher des événements pour les changements de valeur de propriété
Lorsque vous travaillez avec des propriétés, vous pouvez rencontrer le besoin de déclencher un événement chaque fois que la valeur de la propriété change.
Question :
Il y a une propriété nommée ImageFullPath1 qui nécessite le déclenchement d'un événement chaque fois que sa valeur change. Malgré l'existence de INotifyPropertyChanged, l'exigence est d'implémenter la solution à l'aide d'événements.
Réponse :
L'interface INotifyPropertyChanged est en effet basée sur des événements. Il a un seul membre, PropertyChanged, qui est un événement auquel les consommateurs peuvent s'abonner.
Cependant, la solution suggérée par Richard n'est pas fiable. Une implémentation plus sûre est :
public class MyClass : INotifyPropertyChanged { private string imageFullPath; protected void OnPropertyChanged(PropertyChangedEventArgs e) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) handler(this, e); } protected void OnPropertyChanged(string propertyName) { OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); } public string ImageFullPath { get { return imageFullPath; } set { if (value != imageFullPath) { imageFullPath = value; OnPropertyChanged("ImageFullPath"); } } } public event PropertyChangedEventHandler PropertyChanged; }
Caractéristiques de cette implémentation :
Événements supplémentaires spécifiques à une propriété :
Si vous souhaitez également créer un événement pour les modifications d'une propriété spécifique, telle que ImageFullPath, vous pouvez ajouter :
protected void OnImageFullPathChanged(EventArgs e) { EventHandler handler = ImageFullPathChanged; if (handler != null) handler(this, e); } public event EventHandler ImageFullPathChanged;
Appeler OnImageFullPathChanged(EventArgs.Empty) après OnPropertyChanged("ImageFullPath").
CallerMemberAttribute dans .Net 4.5 :
Dans .Net 4.5 et supérieur, CallerMemberAttribute vous permet de supprimer le nom de propriété codé en dur dans la source code :
protected void OnPropertyChanged( [System.Runtime.CompilerServices.CallerMemberName] string propertyName = "") { OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); } public string ImageFullPath { get { return imageFullPath; } set { if (value != imageFullPath) { imageFullPath = value; OnPropertyChanged(); } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!