Comment notifier les changements de valeur de propriété à l'aide d'événements
Pour observer les changements de valeur de propriété, vous pouvez utiliser l'interface INotifyPropertyChanged, qui inclut l'événement PropertyChanged . Les consommateurs peuvent s'abonner à cet événement pour détecter des modifications dans des propriétés spécifiques.
public interface INotifyPropertyChanged { event PropertyChangedEventHandler PropertyChanged; }
Implémentation sécurisée de INotifyPropertyChanged avec des événements
Alors que la réponse précédente de Richard a introduit une implémentation non sécurisée , voici une version révisée qui garantit la sécurité des threads :
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; }
Ceci mise en œuvre :
Modification de propriété spécifique supplémentaire Événement
Pour plus de granularité, vous pouvez définir un événement distinct pour une propriété spécifique, tel que :
protected void OnImageFullPathChanged(EventArgs e) { EventHandler handler = ImageFullPathChanged; if (handler != null) handler(this, e); } public event EventHandler ImageFullPathChanged;
Dans le setter de la propriété, invoquez à la fois l'événement général OnPropertyChanged et l'événement général OnPropertyChanged. événement OnImageFullPathChanged spécifique.
Simplification de l'acquisition de nom de propriété (C# 4.5 Uniquement)
Enfin, pour C# 4.5 et supérieur, utilisez CallerMemberAttribute pour extraire automatiquement le nom de la propriété, éliminant ainsi le besoin de littéraux de chaîne manuels :
protected void OnPropertyChanged( [System.Runtime.CompilerServices.CallerMemberName] string propertyName = "") { OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); }
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!