如何引发属性值变化事件
问题描述:
您想要每当特定属性(例如 ImageFullPath1)的值发生更改时触发事件。虽然 INotifyPropertyChanged 是一种已知的解决方案,但您更喜欢基于事件的方法。
答案:
要使用事件实现属性更改通知,请利用 INotifyPropertyChanged 接口:
public class MyClass : INotifyPropertyChanged { // ... }
INotifyPropertyChanged 接口定义了一个 PropertyChanged 事件,消费者可以订阅。要触发此事件,请实现 OnPropertyChanged 方法:
protected void OnPropertyChanged(PropertyChangedEventArgs e) { // ... } protected void OnPropertyChanged(string propertyName) { OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); }
对于 ImageFullPath1 属性,按如下所示更新设置器:
public string ImageFullPath1 { get { ... } set { if (value != ImageFullPath1) { ImageFullPath1 = value; OnPropertyChanged(nameof(ImageFullPath1)); } } }
或者,对于特定属性,您可以创建其他事件:
protected void OnImageFullPath1Changed(EventArgs e) { // ... } public event EventHandler ImageFullPath1Changed;
在属性设置器中,添加OnPropertyChanged 之后的 OnImageFullPath1Changed(EventArgs.Empty)。
使用 .NET 4.5 改进的代码:
使用 .NET 4.5,您可以使用 CallerMemberNameAttribute 进行更简洁的实现:
protected void OnPropertyChanged( [System.Runtime.CompilerServices.CallerMemberName] string propertyName = "") { OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); }
以上是C#中如何在属性值变化时触发事件?的详细内容。更多信息请关注PHP中文网其他相关文章!