Heim >Backend-Entwicklung >C++ >Wie löst man Ereignisse für Eigenschaftswertänderungen in C# aus?
Ereignisse für Immobilienwertänderungen auslösen
Bei der Arbeit mit Eigenschaften müssen Sie möglicherweise immer dann ein Ereignis auslösen, wenn sich der Wert der Eigenschaft ändert.
Frage:
Es gibt eine Eigenschaft mit dem Namen ImageFullPath1, das erfordert, dass ein Ereignis ausgelöst wird, wenn sich sein Wert ändert. Trotz der Existenz von INotifyPropertyChanged besteht die Anforderung darin, die Lösung mithilfe von Ereignissen zu implementieren.
Antwort:
Die INotifyPropertyChanged-Schnittstelle basiert tatsächlich auf Ereignissen. Es gibt ein einziges Mitglied, PropertyChanged, ein Ereignis, das Verbrauchern das Abonnieren ermöglicht.
Die von Richard vorgeschlagene Lösung ist jedoch nicht zuverlässig. Eine sicherere Implementierung ist:
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; }
Merkmale dieser Implementierung:
Zusätzliche eigenschaftsspezifische Ereignisse:
Wenn Sie auch ein Ereignis für Änderungen in einer bestimmten Eigenschaft erstellen möchten, z. B. ImageFullPath, Sie können hinzufügen:
protected void OnImageFullPathChanged(EventArgs e) { EventHandler handler = ImageFullPathChanged; if (handler != null) handler(this, e); } public event EventHandler ImageFullPathChanged;
Anrufen OnImageFullPathChanged(EventArgs.Empty) nach OnPropertyChanged("ImageFullPath").
CallerMemberAttribute in .Net 4.5:
In .Net 4.5 und höher ermöglicht Ihnen das CallerMemberAttribute Folgendes Entfernen Sie den hartcodierten Eigenschaftsnamen in der Quelle 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(); } } }
Das obige ist der detaillierte Inhalt vonWie löst man Ereignisse für Eigenschaftswertänderungen in C# aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!