C#中BindingList的作用小结

 更新时间:2026年01月09日 11:06:16   作者:就是有点傻  
BindingList是C#中用于实现数据绑定的重要集合类,提供自动通知UI更新、双向数据绑定和扩展事件支持等功能,下面就来详细介绍一下,感兴趣的可以了解一下

在C#中,BindingList<T> 是一个非常重要的集合类,位于 System.ComponentModel 命名空间,主要用于实现数据绑定(Data Binding)场景。

1. 核心作用

BindingList<T> 是 List<T> 的增强版,主要提供以下功能:

  • 自动通知UI更新:当集合内容变化(增删改)时,自动触发事件通知绑定控件(如DataGridView、ListBox等)刷新显示。
  • 支持双向数据绑定:简化UI控件与数据集合的同步,无需手动编写刷新逻辑。
  • 扩展的事件支持:比普通 List<T> 提供更多细粒度的事件(如 AddingNewListChanged)。

2. 关键特性

(1) 自动触发UI更新

BindingList<string> names = new BindingList<string>();
dataGridView1.DataSource = names; // 绑定到DataGridView

names.Add("Alice"); // 添加项时,DataGridView会自动更新显示
names.RemoveAt(0);  // 删除项时,UI同步更新

(2) 丰富的事件

事件触发时机
ListChanged列表内容或结构变化时(增删改排序等)
AddingNew添加新项之前
AddingNew添加新项之前
names.ListChanged += (sender, e) => 
{
    Console.WriteLine($"列表已更改,类型: {e.ListChangedType}");
};

(3) 支持编辑通知

若 T 实现 INotifyPropertyChanged,项属性修改时也会通知UI:

public class Person : INotifyPropertyChanged
{
    private string _name;
    public string Name
    {
        get => _name;
        set { _name = value; OnPropertyChanged(nameof(Name)); }
    }
    public event PropertyChangedEventHandler? PropertyChanged;
    protected void OnPropertyChanged(string propertyName) =>
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

// 使用
BindingList<Person> people = new BindingList<Person>();
dataGridView1.DataSource = people;

people.Add(new Person { Name = "Bob" });
people[0].Name = "Alice"; // 修改属性时,UI自动更新!

3. 典型使用场景

(1) WinForms/WPF数据绑定

// WinForms示例
BindingList<Product> products = new BindingList<Product>();
dataGridView1.DataSource = products;

// WPF示例(需配合ObservableCollection,但BindingList在某些场景仍有用)
listBox.ItemsSource = products;

 (2) 实时监控集合变化

var logs = new BindingList<string>();
logs.ListChanged += (s, e) => Console.WriteLine($"日志变更: {logs[e.NewIndex]}");
logs.Add("系统启动"); // 触发事件

4. 注意事项

  • 性能:频繁大规模更新时,考虑使用 ResetItems 通知而非逐项更新。
  • 线程安全:需通过 Invoke 在UI线程操作(与所有控件交互一样)。
  • WPF优先用 ObservableCollection<T>BindingList 主要面向WinForms设计。

到此这篇关于C#中BindingList的作用小结的文章就介绍到这了,更多相关C# BindingList作用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • C#如何利用反射将枚举绑定到下拉框详解

    C#如何利用反射将枚举绑定到下拉框详解

    这篇文章主要给大家介绍了关于C#如何利用反射将枚举绑定到下拉框的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧
    2018-07-07
  • 微信开发--企业转账到用户

    微信开发--企业转账到用户

    本文主要介绍了微信开发--企业转账到用户的实现方法与步骤。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • DataGridView实现点击列头升序和降序排序

    DataGridView实现点击列头升序和降序排序

    这篇文章介绍了DataGridView实现点击列头升序和降序排序的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • c#使用htmlagilitypack解析html格式字符串

    c#使用htmlagilitypack解析html格式字符串

    这篇文章主要介绍了c#使用htmlagilitypack解析html格式字符串的示例,需要的朋友可以参考下
    2014-03-03
  • C#实现无限级联下拉列表框

    C#实现无限级联下拉列表框

    这篇文章主要为大家详细介绍了C#实现无限级联下拉列表框的相关资料,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • C#使用Task.ContinueWith组合任务

    C#使用Task.ContinueWith组合任务

    这篇文章介绍了C#使用Task.ContinueWith组合任务的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C#实现路由器断开连接,更改公网ip的实例代码

    C#实现路由器断开连接,更改公网ip的实例代码

    C#实现路由器断开连接,更改公网ip的实例代码,需要的朋友可以参考一下
    2013-05-05
  • C#使用虚拟方法实现多态

    C#使用虚拟方法实现多态

    这篇文章主要介绍了C#使用虚拟方法实现多态,涉及C#多态的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • C# 数组中的 indexOf 方法及使用

    C# 数组中的 indexOf 方法及使用

    这篇文章主要介绍了C# 数组中的 indexOf 方法以及indexof方法的使用讲解,需要的朋友可以参考下
    2018-02-02
  • 关于C#委托三种调用的分享使用

    关于C#委托三种调用的分享使用

    这篇文章主要介绍了关于C#委托三种调用的分享使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论