如何在属性值更改时引发事件
您想要一个名为 ImageFullPath1 的属性每当其值发生变化时引发一个事件。虽然您知道使用 INotifyPropertyChanged 接口,但您更喜欢利用事件来实现此目的。
INotifyPropertyChanged 接口实际上是通过事件实现的。它有一个成员,PropertyChanged,这是一个可以由消费者订阅的事件。
安全实现:
以下代码代码片段演示了 INotifyPropertyChanged 接口的安全实现,以及特定属性的附加事件(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; }
此实现确保以下内容:
.NET 4.5 中的 CallerMemberAttribute:
对于 .NET 4.5 及更高版本,CallerMemberAttribute可用于消除硬编码字符串源代码中的属性名称:
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(); } } }
以上是如何在 C# 中属性值更改时引发自定义事件?的详细内容。更多信息请关注PHP中文网其他相关文章!