文章目录
- 前言
- 一、核心概念简介
- ObservableCollection
- List
- 二、关键差异对比
- 三、典型使用场景
- ObservableCollection 的适用场景
- List 的适用场景
- 四、在Community Toolkit MVVM中使用ObservableCollection<Data>和List<Data>
- 场景1:动态列表(ObservableCollection)
- 场景1:静态列表(List)
- 总结
前言
在WPF项目中如何去选择使用ObservableCollection 与 List集合
一、核心概念简介
ObservableCollection
ObservableCollection 是 .NET 提供的可观察集合类,继承自 Collection,并实现了 INotifyCollectionChanged 和 INotifyPropertyChanged 接口。其核心特性是:当集合内容(如元素添加、删除、替换或重置)发生变更时,会主动触发事件通知订阅者
List
List 是最常用的泛型列表类,继承自 IList、ICollection 等接口。它基于动态数组实现,提供高效的随机访问和增删操作,但默认不支持集合变更通知
二、关键差异对比
特性 | ObservableCollection | List |
---|---|---|
变更通知 | 支持(通过 CollectionChanged 事件) | 不支持 |
适用场景 | 需要数据绑定或监听集合变更的场景(如 UI 控件) | 后台数据处理、无需通知的高频操作场景 |
内存占用 | 略高(需维护事件订阅机制) | 更低 |
三、典型使用场景
ObservableCollection 的适用场景
- UI 数据绑定:在 WPF、UWP 或 WinUI 中,绑定到 ListBox、DataGrid 等控件时,集合内容变更需自动同步到界面
- 状态监控:需要监听集合变更并触发其他逻辑(如日志记录、统计更新)
List 的适用场景
- 后台数据处理:如算法计算、批量数据导入导出,无需外部感知集合变更
- 高频增删操作:频繁添加/删除元素时(如临时缓存),避免事件通知带来的性能开销
四、在Community Toolkit MVVM中使用ObservableCollection和List
场景1:动态列表(ObservableCollection)
// ViewModel
[ObservableProperty]
private ObservableCollection<Data> _apiData1;public void AddData(Data item)
{_apiData1.Add(item); // UI自动刷新
}// XAML绑定
<ListView ItemsSource="{Binding ApiData1}"/>
效果:向_apiData1添加/删除元素时,绑定控件自动更新
场景1:静态列表(List)
[ObservableProperty]
private List<Data> _apiData2;public void ReplaceData(List<Data> newData)
{ApiData2 = newData; // 需整个集合替换才能触发UI更新
}
局限:若通过_apiData2.Add()修改集合,UI不会刷新,需手动调用OnPropertyChanged(nameof(ApiData2))
总结
ObservableCollection 与 List 的核心差异在于是否支持集合变更通知。前者适用于需要数据绑定或监听变更的场景(如 UI 开发),后者更适合后台数据处理或高频操作场景