WPF ObservableCollection 和 BindingList 有什么区别

ObservableCollection<T>BindingList<T>都是.NET Framework中的泛型集合类型,它们都支持数据绑定和元素的增加、删除、修改等操作。然而,它们之间存在一些关键的差异,使它们在不同的场景下更有用。

ObservableCollection:

ObservableCollection<T>是用于WPF数据绑定的首选集合。它实现了INotifyCollectionChanged接口,这意味着当集合中的元素被添加、删除或整个列表被刷新时,它会提供通知,这对于绑定到WPF UI元素(例如ListBoxItemsControl)是必要的。

ObservableCollection<T>还实现了INotifyPropertyChanged接口,因此当集合中的元素被替换或者Count属性发生改变时,它也会提供通知。

BindingList:

BindingList<T>是.NET Framework 2.0引入的,主要用于Windows Forms数据绑定。它提供了一些ObservableCollection<T>没有的特性,如排序和搜索支持,但这些特性通常在WPF中不常用或有其他方式实现。

BindingList<T>实现了IBindingList接口,该接口提供了对数据源列表更改的通知,包括添加、删除、修改等操作。

总结

  • ObservableCollection<T>通常是WPF数据绑定的首选集合,它在集合变更时提供通知。
  • BindingList<T>主要用于Windows Forms数据绑定,提供了排序和搜索支持。
  • 两者都实现了对数据源列表更改的通知,但在不同的上下文和用例中,一种可能比另一种更有用。

在选择使用哪种类型时,你应考虑你的特定需求和你正在使用的UI框架。如果你正在开发WPF应用程序,那么ObservableCollection<T>可能是最好的选择。如果你正在开发Windows Forms应用程序,那么BindingList<T>可能更适合你的需求。

以下是使用ObservableCollection<T>BindingList<T>的示例代码。

ObservableCollection 示例:

csharp 复制代码
// 创建ObservableCollection
ObservableCollection<string> collection = new ObservableCollection<string>();

// 订阅CollectionChanged事件
collection.CollectionChanged += (s, e) => {
    Console.WriteLine("Collection changed: {0}", e.Action);
};

// 添加元素
collection.Add("Item 1");

// 删除元素
collection.Remove("Item 1");

在上述的例子中,当你向collection添加或删除元素时,你会看到在控制台上打印出相应的更改通知。

BindingList 示例:

csharp 复制代码
// 创建BindingList
BindingList<string> bindingList = new BindingList<string>();

// 订阅ListChanged事件
bindingList.ListChanged += (s, e) => {
    Console.WriteLine("List changed: {0}", e.ListChangedType);
};

// 添加元素
bindingList.Add("Item 1");

// 删除元素
bindingList.Remove("Item 1");

在这个例子中,当你向bindingList添加或删除元素时,你会看到在控制台上打印出相应的更改通知。

这些示例都是在控制台应用程序中运行的。在实际的WPF或Windows Forms应用程序中,你可能会在更改集合时更新UI,而不是在控制台上打印消息。

相关推荐
myenjoy_18 小时前
大规模采集架构——从单台网关到千点集群
架构·wpf
Chris _data14 小时前
c#学习WPF笔记(一)
学习·c#·wpf
FuckPatience1 天前
WPF 自定义容器控件的布局
wpf
逆境不可逃1 天前
深入理解 SingleFlight:从单机到分布式的请求合并方案全解析
分布式·wpf
TDengine (老段)1 天前
TDengine 逻辑计划生成 — 从 AST 到关系代数算子树
大数据·数据库·物联网·wpf·时序数据库·tdengine·涛思数据
小二·2 天前
微服务架构设计与实践
微服务·架构·wpf
暖馒2 天前
WPF-Prism学习入门步骤记录
学习·wpf
baivfhpwxf20232 天前
雷赛(Leadshine)EtherCAT 数字 I/O 模块(如 EMC-E5064-8)的状态指示灯(I/O 状态)说明
c#·wpf
故渊at3 天前
第二板块:Android 四大组件标准化学理 | 第十二篇:四大组件全景总结与系统服务(System Server)架构
android·架构·wpf·四大组件·system service
伶俜663 天前
# [特殊字符] 零基础学 ArkUI 数据持久化(专题三):5 种存储方案深度对比
学习·华为·wpf·harmonyos