【发布时间】:2021-04-10 00:20:53
【问题描述】:
我有一个位图和一个像这样的属性:
private Bitmap host_Bitmap;
private Bitmap Host_Bitmap {get;set;}
host_Bitmap 更改时如何创建事件?
【问题讨论】:
标签: c# properties inotifypropertychanged propertychanged propertychangelistener
我有一个位图和一个像这样的属性:
private Bitmap host_Bitmap;
private Bitmap Host_Bitmap {get;set;}
host_Bitmap 更改时如何创建事件?
【问题讨论】:
标签: c# properties inotifypropertychanged propertychanged propertychangelistener
如果你想对一个属性采取简单的路线,你可以添加一个事件,然后在集合中调用它:
public event EventHandler BitmapChanged;
private Bitmap _hostBitmap;
public Bitmap HostBitmap { get => _hostBitmap;
set{
_hostBitmap = value;
BitmapChanged?.Invoke(this, EventArgs.Empty);
}
}
如果您想传递有关事件的更多信息,您可以提供修改后的 EventArgs 子类并将 BitmapChanged 属性类型声明为 EventHandler<YourEventArgsSubclass>
如果您有很多与事件相关联的属性,请查看实现 INotifyPropertyChanged
【讨论】:
EventHandler<> 用于事件的类型,因此它将是强类型的。
EventHandler 和 EventHandler<T> 类型 both 已经是委托类型。使用任何一种都可以像使用任何其他委托类型一样创建“强类型”事件。
EventHandler<T> 的上下文中 - documentation 概述了它不应该是真的有必要这样做,所以我不确定说“代替”是“正确的”,因为(对我而言)它暗示了一种通常必要的情况,而实际上却没有必要?
MyPropertyChanged 委托)可以更容易和更清晰一个间接的Eventhandler<MyArgs>。否则,我会找到适合的和个性化的答案。