当前位置: 首页 > news >正文

【三】ObservableCollection 与 List 的区别

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、核心概念简介
    • 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 等接口。它基于动态数组实现,提供高效的随机访问和增删操作,但默认不支持集合变更通知

二、关键差异对比

特性​ObservableCollectionList
变更通知支持(通过 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 开发),后者更适合后台数据处理或高频操作场景

http://www.dtcms.com/a/274317.html

相关文章:

  • RK3566/RK3568 Android11 CAN开发(内核配置+测试验证+安卓app开发)
  • 2025 年第十五届 APMCM 亚太地区大学生数学建模竞赛C题 基于Quantum Boosting的二分类模型问题
  • 5G标准学习笔记15 --CSI-RS测量
  • 【龙泽科技】新能源汽车维护与动力蓄电池检测仿真教学软件【吉利几何G6】
  • 深入理解C语言内存空间、函数指针(三)(重点是函数指针)
  • Redis 主从复制及哨兵模式模拟部署
  • 3.检查函数 if (!CheckStart()) return 的妙用 C#例子
  • PBR渲染
  • 【网络安全】理解安全事件的“三分法”流程:应对警报的第一道防线
  • leaflet【十二】自定义图层——海量数据加载
  • 安全监测预警平台的应用场景
  • 机器学习数据集加载全攻略:从本地到网络
  • Git Submodule 介绍和使用指南
  • FS820R08A6P2LB——英飞凌高性能IGBT模块,驱动高效能源未来!
  • Vscode 下载远程服务器失败解决方法
  • Jenkins 版本升级与插件问题深度复盘:从 2.443 到 2.504.3 及功能恢复全解析
  • 和鲸社区深度学习基础训练营2025年关卡2(3)pytorch
  • 限流算法
  • GT IP核仿真测试
  • 关于大模型引用特定网页或文章的思考
  • 稳石氢能受邀参加亚洲氢能与燃料电池技术应用论坛,荣获2025中国制氢装备技术创新企业。
  • P1484 种树,特殊情形下的 WQS 二分转化。
  • 【leetcode】1486. 数组异或操作
  • 国际学术期刊IJCAST发布最新一期论文
  • 声明式 vs 编程式:Spring事务管理全对比
  • windows exe爬虫:exe抓包
  • Redis的高级特性与应用实战指南
  • Kubernetes高级调度1
  • 用鼠标点击终端窗口的时候出现:0;61;50M0;61;50M0;62;50M0
  • Typecho图片自动Webp转换插件开发指南