Heim >Backend-Entwicklung >C++ >Wie löst man in C# ein benutzerdefiniertes Ereignis aus, wenn sich ein Eigenschaftswert ändert?
So lösen Sie ein Ereignis aus, wenn sich der Wert einer Eigenschaft ändert
Sie haben eine Eigenschaft mit dem Namen ImageFullPath1, die Sie verwenden möchten löst ein Ereignis aus, wenn sich sein Wert ändert. Obwohl Ihnen die Verwendung der Schnittstelle INotifyPropertyChanged bekannt ist, bevorzugen Sie die Verwendung von Ereignissen für diesen Zweck.
Die Schnittstelle INotifyPropertyChanged wird tatsächlich mit Ereignissen implementiert. Es hat ein einziges Mitglied, PropertyChanged, ein Ereignis, das von Verbrauchern abonniert werden kann.
Sichere Implementierung:
Der folgende Code Das Snippet demonstriert eine sichere Implementierung der Schnittstelle INotifyPropertyChanged mit einem zusätzlichen Ereignis für ein bestimmtes Ereignis Eigenschaft (ImageFullPath):
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"); } } } protected void OnImageFullPathChanged(EventArgs e) { EventHandler handler = ImageFullPathChanged; if (handler != null) handler(this, e); } public event PropertyChangedEventHandler PropertyChanged; public event EventHandler ImageFullPathChanged; }
Diese Implementierung stellt Folgendes sicher:
CallerMemberAttribute in .NET 4.5:
Für .NET 4.5 und höher das CallerMemberAttribute kann verwendet werden, um die hartcodierte Zeichenfolge für die Eigenschaft zu eliminieren Namen im Quellcode:
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(); } } }
Das obige ist der detaillierte Inhalt vonWie löst man in C# ein benutzerdefiniertes Ereignis aus, wenn sich ein Eigenschaftswert ändert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!