查看: 28|回复: 0

[教程] C#中BindingList的作用小结

[复制链接]

1

主题

0

回帖

0

积分

积极分子

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2010-7-24
发表于 2026-1-9 11:06:16 | 显示全部楼层 |阅读模式

在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#中HttpWebRequest的用法详解
  • C# 一个WCF简单实例
  • C#中使用split分割字符串的几种方法小结
  • c#的dllimport使用方法详解
  • C#中string.format用法详解
  • C#中WinForm程序退出方法技巧总结
  • C#时间格式化(Datetime)用法详解
  • C# Stream 和 byte[] 之间的转换
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部