在c#中,bindinglist<t> 是一个非常重要的集合类,位于 system.componentmodel 命名空间,主要用于实现数据绑定(data binding)场景。
1. 核心作用
bindinglist<t> 是 list<t> 的增强版,主要提供以下功能:
- 自动通知ui更新:当集合内容变化(增删改)时,自动触发事件通知绑定控件(如datagridview、listbox等)刷新显示。
- 支持双向数据绑定:简化ui控件与数据集合的同步,无需手动编写刷新逻辑。
- 扩展的事件支持:比普通
list<t>提供更多细粒度的事件(如addingnew、listchanged)。
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作用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论