位图属性更改时如何引发事件? [复制]
Posted
技术标签:
【中文标题】位图属性更改时如何引发事件? [复制]【英文标题】:How to raise an event when an Bitmap property is changed? [duplicate] 【发布时间】:2021-04-10 00:20:53 【问题描述】:我有一个位图和一个像这样的属性:
private Bitmap host_Bitmap;
private Bitmap Host_Bitmap get;set;
host_Bitmap
更改时如何创建事件?
【问题讨论】:
还有 MSDoc 文章:How to: Implement Property Change Notification 和 INotifyPropertyChanged.PropertyChanged Événement 也使用简单事件:Data binding without INotifyPropertyChanged 【参考方案1】:如果你想对一个属性采取简单的路线,你可以添加一个事件,然后在集合中调用它:
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
【讨论】:
也可以创建delegate 来代替EventHandler<>
用于事件的类型,因此它将是强类型的。
@OlivierRogier:虽然我觉得这个答案没有多大用处(网站上已经有很多重复项),但我不明白你在这里的批评。 EventHandler
和 EventHandler<T>
类型 both 已经是委托类型。使用任何一种都可以像使用任何其他委托类型一样创建“强类型”事件。
@Olivier 是的,但这可能仅在特殊情况下才有必要,例如在不理解通用 EventHandler<T>
的上下文中 - documentation 概述了它不应该是真的有必要这样做,所以我不确定说“代替”是“正确的”,因为(对我而言)它暗示了一种通常必要的情况,而实际上却没有必要?
我所说的在泛型之上的强类型并不是批评,而是另一种意思,有时使用专用类型(例如MyPropertyChanged
委托)可以更容易和更清晰一个间接的Eventhandler<MyArgs>
。否则,我会找到适合的和个性化的答案。
谢谢你的帮助,我去试试以上是关于位图属性更改时如何引发事件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
更改 DataGrid.ItemsSource 时如何引发事件
当弹出窗口中的 JavaScript 更改输入元素时引发“onChange”事件