C#中BindingList的作用小結(jié)
在C#中,BindingList<T> 是一個(gè)非常重要的集合類,位于 System.ComponentModel 命名空間,主要用于實(shí)現(xiàn)數(shù)據(jù)綁定(Data Binding)場(chǎng)景。
1. 核心作用
BindingList<T> 是 List<T> 的增強(qiáng)版,主要提供以下功能:
- 自動(dòng)通知UI更新:當(dāng)集合內(nèi)容變化(增刪改)時(shí),自動(dòng)觸發(fā)事件通知綁定控件(如DataGridView、ListBox等)刷新顯示。
- 支持雙向數(shù)據(jù)綁定:簡(jiǎn)化UI控件與數(shù)據(jù)集合的同步,無(wú)需手動(dòng)編寫刷新邏輯。
- 擴(kuò)展的事件支持:比普通
List<T>提供更多細(xì)粒度的事件(如AddingNew、ListChanged)。
2. 關(guān)鍵特性
(1) 自動(dòng)觸發(fā)UI更新
BindingList<string> names = new BindingList<string>();
dataGridView1.DataSource = names; // 綁定到DataGridView
names.Add("Alice"); // 添加項(xiàng)時(shí),DataGridView會(huì)自動(dòng)更新顯示
names.RemoveAt(0); // 刪除項(xiàng)時(shí),UI同步更新(2) 豐富的事件
| 事件 | 觸發(fā)時(shí)機(jī) |
|---|---|
| ListChanged | 列表內(nèi)容或結(jié)構(gòu)變化時(shí)(增刪改排序等) |
| AddingNew | 添加新項(xiàng)之前 |
| AddingNew | 添加新項(xiàng)之前 |
names.ListChanged += (sender, e) =>
{
Console.WriteLine($"列表已更改,類型: {e.ListChangedType}");
};(3) 支持編輯通知
若 T 實(shí)現(xiàn) INotifyPropertyChanged,項(xiàng)屬性修改時(shí)也會(huì)通知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"; // 修改屬性時(shí),UI自動(dòng)更新!3. 典型使用場(chǎng)景
(1) WinForms/WPF數(shù)據(jù)綁定
// WinForms示例 BindingList<Product> products = new BindingList<Product>(); dataGridView1.DataSource = products; // WPF示例(需配合ObservableCollection,但BindingList在某些場(chǎng)景仍有用) listBox.ItemsSource = products;
(2) 實(shí)時(shí)監(jiān)控集合變化
var logs = new BindingList<string>();
logs.ListChanged += (s, e) => Console.WriteLine($"日志變更: {logs[e.NewIndex]}");
logs.Add("系統(tǒng)啟動(dòng)"); // 觸發(fā)事件4. 注意事項(xiàng)
- 性能:頻繁大規(guī)模更新時(shí),考慮使用
ResetItems通知而非逐項(xiàng)更新。 - 線程安全:需通過(guò)
Invoke在UI線程操作(與所有控件交互一樣)。 - WPF優(yōu)先用
ObservableCollection<T>:BindingList主要面向WinForms設(shè)計(jì)。
到此這篇關(guān)于C#中BindingList的作用小結(jié)的文章就介紹到這了,更多相關(guān)C# BindingList作用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Unity使用攝像機(jī)實(shí)現(xiàn)望遠(yuǎn)鏡效果
這篇文章主要為大家詳細(xì)介紹了Unity攝使用像機(jī)實(shí)現(xiàn)望遠(yuǎn)鏡效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
C#面向?qū)ο笾M實(shí)現(xiàn)商城購(gòu)物功能
這篇文章主要為大家詳細(xì)介紹了C#面向?qū)ο笾M實(shí)現(xiàn)商城購(gòu)物功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
C#數(shù)據(jù)結(jié)構(gòu)與算法揭秘三 鏈表
這節(jié)我們討論鏈表的基本操作,并且畫圖以證明,下屆中我們將討論雙向鏈表,環(huán)形鏈表 應(yīng)用舉例2012-11-11
Winform控件Picture實(shí)現(xiàn)圖片拖拽顯示效果
這篇文章主要為大家詳細(xì)介紹了Winform控件Picture實(shí)現(xiàn)圖片拖拽顯示效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
混合語(yǔ)言編程—C#使用原生的Directx和OpenGL繪圖的方法
本文要說(shuō)的是混合C#和C/C++語(yǔ)言編程,在C#的Winform和WPF下使用原生的Direct和OpenGL進(jìn)行繪圖2013-09-09
C#實(shí)現(xiàn)簡(jiǎn)單的JSON序列化功能代碼實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)簡(jiǎn)單的JSON序列化功能,大家可以參考使用2013-11-11

