位图属性更改时如何引发事件? [复制]

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:虽然我觉得这个答案没有多大用处(网站上已经有很多重复项),但我不明白你在这里的批评。 EventHandlerEventHandler<T> 类型 both 已经是委托类型。使用任何一种都可以像使用任何其他委托类型一样创建“强类型”事件。 @Olivier 是的,但这可能仅在特殊情况下才有必要,例如在不理解通用 EventHandler<T> 的上下文中 - documentation 概述了它不应该是真的有必要这样做,所以我不确定说“代替”是“正确的”,因为(对我而言)它暗示了一种通常必要的情况,而实际上却没有必要? 我所说的在泛型之上的强类型并不是批评,而是另一种意思,有时使用专用类型(例如MyPropertyChanged 委托)可以更容易和更清晰一个间接的Eventhandler<MyArgs>。否则,我会找到适合的和个性化的答案。 谢谢你的帮助,我去试试

以上是关于位图属性更改时如何引发事件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

更改 DataGrid.ItemsSource 时如何引发事件

libevent:在文件更改时引发事件

当弹出窗口中的 JavaScript 更改输入元素时引发“onChange”事件

Yii 更新时,检测是不是在 beforeSave() 上更改了特定的 AR 属性

如何使用jQuery触发类更改事件?

如何在 IOS 中的联系人更改事件中获得通知? [复制]