You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除绑定到BindingSource的ListChanged事件?附绑定代码示例

如何移除用匿名委托绑定的ListChanged事件

这个问题其实挺常见的——用匿名委托绑定事件确实写起来简洁,但要移除的时候就会碰到麻烦,因为直接写在+=后面的匿名委托没有一个可引用的变量,每次创建的匿名委托都是独立的实例,哪怕代码逻辑完全一样,也没法用相同的lambda表达式去执行-=操作。

正确的做法:提前保存匿名委托的引用

要实现可移除,你需要先把匿名委托赋值给一个ListChangedEventHandler类型的变量,再用这个变量去绑定和移除事件:

  1. 声明并初始化委托变量:
// 先把匿名委托存到变量里
ListChangedEventHandler countUpdateHandler = (object sender, ListChangedEventArgs e) => {
    lblCount.Text = bs.Count.ToString();
};
  1. 使用这个变量绑定事件:
BindingSource bs = new BindingSource(dsOptions, "students");
bs.ListChanged += countUpdateHandler;
  1. 需要移除事件时,直接用同一个变量执行-=:
bs.ListChanged -= countUpdateHandler;

注意点

如果已经直接写了bs.ListChanged += (sender, e) => { ... };这种没有保存引用的代码,那没有办法直接移除这个事件绑定,因为你没有办法获取到那个匿名委托的实例。这种情况下,要么接受这个事件会一直存在直到BindingSource对象被垃圾回收,要么重新创建一个新的BindingSource实例来替代当前的。

内容的提问来源于stack exchange,提问作者Hilal Al-Rajhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:34:12