So benachrichtigen Sie Änderungen des Eigenschaftswerts mithilfe von Ereignissen
Um Änderungen des Eigenschaftswerts zu beobachten, können Sie die INotifyPropertyChanged-Schnittstelle verwenden, die das PropertyChanged-Ereignis enthält . Dieses Ereignis kann von Verbrauchern abonniert werden, um Änderungen an bestimmten Eigenschaften zu erkennen.
public interface INotifyPropertyChanged { event PropertyChangedEventHandler PropertyChanged; }
Sichere Implementierung von INotifyPropertyChanged mit Ereignissen
Während Richards frühere Antwort eine unsichere Implementierung einführte , hier ist eine überarbeitete Version, die Thread-Sicherheit gewährleistet:
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; }
Dies Implementierung:
Zusätzliche spezifische Eigenschaft Ereignis ändern
Für zusätzliche Granularität können Sie ein separates Ereignis für eine bestimmte Eigenschaft definieren, wie zum Beispiel:
protected void OnImageFullPathChanged(EventArgs e) { EventHandler handler = ImageFullPathChanged; if (handler != null) handler(this, e); } public event EventHandler ImageFullPathChanged;
Rufen Sie im Setter der Eigenschaft sowohl das allgemeine OnPropertyChanged-Ereignis als auch auf das spezifische OnImageFullPathChanged-Ereignis.
Vereinfachung der Erfassung von Eigenschaftsnamen (C#) Nur 4.5)
Abschließend können Sie für C# 4.5 und höher das CallerMemberAttribute verwenden, um den Eigenschaftsnamen automatisch zu extrahieren, sodass keine manuellen Zeichenfolgenliterale erforderlich sind:
protected void OnPropertyChanged( [System.Runtime.CompilerServices.CallerMemberName] string propertyName = "") { OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); }
Das obige ist der detaillierte Inhalt vonWie kann ich INotifyPropertyChanged für Benachrichtigungen über Eigenschaftswertänderungen sicher implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!