77.ObservableCollection使用介绍1 C#例子 WPF例子

可观察集合ObservableCollection

using System;
using System.Collections.ObjectModel;class Program
{static void Main(){// 创建一个可观察集合ObservableCollection<string> list = new ObservableCollection<string>();// 注册集合变化事件list.CollectionChanged += (sender, e) =>{Console.WriteLine($"Action: {e.Action}");// 处理新增项if (e.NewItems != null){foreach (var item in e.NewItems){Console.WriteLine($"Added: {item}");}}// 处理删除项if (e.OldItems != null){foreach (var item in e.OldItems){Console.WriteLine($"Removed: {item}");}}};// 添加元素list.Add("Hello");list.Add("World");list.Remove("Hell"); // 删除不存在的元素,不会触发事件//list.Remove("Hello"); // 删除存在的元素,会触发事件// 删除元素// 注意:删除时索引会随着元素的移除而改变// 先删除 "World"(索引 1),再删除 "Hello"(索引 0)list.RemoveAt(1); // 删除索引为 1 的元素("World")list.RemoveAt(0); // 删除索引为 0 的元素("Hello")// 其他删除方式(可选)// 先删除 "Hello",再删除 "World"// list.RemoveAt(0);// list.RemoveAt(0);// 清空集合// 注意:Clear 方法会触发 CollectionChanged 事件,但不会触发 NewItems 和 OldItems 的变化list.Clear();}
}

在现代的软件开发中,尤其是在构建动态用户界面(如 WPF、UWP 或 Xamarin)时,数据绑定是一个核心概念。它允许开发者将数据源与界面元素绑定,从而实现数据的自动更新和同步。在 .NET 中,ObservableCollection<T> 是一个专门为这种场景设计的集合类,它提供了动态通知功能,使得集合的变化能够实时反映到绑定的用户界面上。

什么是 ObservableCollection

ObservableCollection<T> 是一个位于 System.Collections.ObjectModel 命名空间下的动态数据集合。它继承自 Collection<T>,并实现了 INotifyCollectionChangedINotifyPropertyChanged 接口。这意味着当集合中的数据发生变化(如添加、删除或修改元素)时,它会自动通知绑定的界面元素,从而触发界面的更新。

这种特性使得 ObservableCollection 成为实现数据绑定的理想选择,尤其是在需要实时更新用户界面的场景中。

核心功能与特性

1. 动态通知

ObservableCollection 的核心功能之一是它能够动态通知外部(如绑定的 UI 元素)集合的变化。这种通知通过 CollectionChanged 事件实现,每当集合中的数据发生变化时,该事件会被触发。事件参数 NotifyCollectionChangedEventArgs 提供了关于变化的详细信息,例如:

  • Action:表示操作类型(如添加、删除、替换等)。

  • NewItems:表示新增的项。

  • OldItems:表示被删除的项。

2. 支持数据绑定

ObservableCollection 是专为数据绑定设计的集合类型。在 WPF 和 UWP 中,它可以与各种控件(如 ListBoxComboBoxDataGrid 等)无缝配合,使得开发者能够轻松实现动态数据的展示和更新。

3. 线程安全问题

需要注意的是,ObservableCollection 默认情况下不是线程安全的。如果需要在多线程环境中使用,需要额外的同步处理。

输出结果

运行上述代码后,控制台输出如下:

Action: Add
Added: Hello
Action: Add
Added: World
Action: Remove
Removed: World
Action: Remove
Removed: Hello
Action: Reset

代码解析

  1. 创建集合
    创建了一个 ObservableCollection<string> 实例,用于存储字符串数据。

  2. 注册事件监听
    通过 CollectionChanged 事件监听集合的变化。事件处理器会根据操作类型(Action)和变化的项(NewItemsOldItems)输出相关信息。

  3. 添加和删除元素

    • 使用 Add 方法添加元素。

    • 使用 Remove 方法尝试删除一个不存在的元素(不会触发事件)。

    • 使用 RemoveAt 方法按索引删除元素。

    • 使用 Clear 方法清空整个集合(会触发 Reset 事件)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/71632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ORACLE 执行查询语句慢(不走对应索引)

1. 索引未被创建或未正确创建 确保为查询中涉及的列创建了索引。例如&#xff0c;如果你经常需要按column_name列进行查询&#xff0c;确保已经为该列创建了索引,索引创建语句 CREATE INDEX idx_column_name ON table_name(column_name); 2、索引不可用 原因:索引可能被标记为不…

r1-reasoning-rag:一种新的 RAG 思路

最近发现了一个开源项目&#xff0c;它提供了一种很好的 RAG 思路&#xff0c;它将 DeepSeek-R1 的推理能力结合 Agentic Workflow 应用于 RAG 检索 项目地址 https://github.com/deansaco/r1-reasoning-rag.git 项目通过结合 DeepSeek-R1、Tavily 和 LangGraph&#xff0c;实现…

服务器硬件配置统计

服务器型号和SN # dmidecode -t system | grep -E "Product Name|Serial Number" | awk -F: {print $2} PowerEdge R7515 4567CPU型号和物理CPU数量 echo "$(lscpu | grep "Model name" | cut -d : -f2 | sed s/^ *//) x $(lscpu | grep "Soc…

Hadoop、Spark、Flink Shuffle对比

一、Hadoop的shuffle 前置知识&#xff1a; Map任务的数量由Hadoop框架自动计算&#xff0c;等于分片数量&#xff0c;等于输入文件总大小 / 分片大小&#xff0c;分片大小为HDFS默认值128M&#xff0c;可调 Reduce任务数由用户在作业提交时通过Job.setNumReduceTasks(int)设…

Docker的常用镜像

Docker的常用镜像命令主要包括镜像的查看、搜索、拉取、删除、构建等操作&#xff0c;以下是综合多个来源的总结&#xff1a; 一、基础镜像操作 查看本地镜像 docker images• 显示所有本地镜像&#xff0c;包含仓库名&#xff08;REPOSITORY&#xff09;、标签&#xff08;TAG…

车载以太网测试-3【Wireshark介绍】

1 摘要 Wireshark 是一款开源的网络协议分析工具&#xff0c;广泛用于网络故障排查、协议分析、网络安全检测等领域。它能够捕获网络数据包&#xff0c;并以详细的、可读的格式显示这些数据包的内容。广泛应用于车载网络测试&#xff0c;是车载网络测试工程师必须掌握的工具。…

基于跨模态地图学习的视觉语言导航

前言 本工作开展的背景&#xff1a; 人类和其他物种构建类似地图的环境表示来完成寻路&#xff1a; &#xff08;1&#xff09;当人类只使用现成的驾驶或步行路径到达目标时&#xff0c;构建认知地图和获取空间知识的能力就会下降&#xff1b; &#xff08;2&#xff09;另…

nodejs关于后端服务开发的探究

前提 在当前的环境中关于web server的主流开发基本上都是java、php之类的&#xff0c;其中java spring系列基本上占了大头&#xff0c;而python之流也在奋起直追&#xff0c;但别忘了nodejs也是可以做这个服务的&#xff0c;只是位置有点尴尬&#xff0c;现在就来探究下nodejs…

Ubuntu20.04本地配置IsaacGym Preview 4的G1训练环境(一)

Ubuntu20.04本地配置IsaacGym Preview 4的G1训练环境 配置conda虚拟环境安装pytorch、cuda和cudnn安装IsaacGym Preview 4配置rsl_rl配置unitree_rl_gym配置unitree_sdk2py 写在前面&#xff0c;要求完成anaconda配置&#xff0c;若没完成&#xff0c;请参考本人其余博客&#…

RangeError: Maximum call stack size exceeded

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

八卡5090服务器首发亮相!

AI 人工智能领域热度居高不下。OpenAI 的 GPT - 4 凭强悍语言处理能力&#xff0c;在内容创作、智能客服等领域广泛应用。清华大学团队的 DeepSeek 大模型在深度学习训练优势突出&#xff0c;正促使各行业应用端算力需求向推理主导转变&#xff0c;呈爆发式增长 。 随着 DeepS…

计算机视觉|Swin Transformer:视觉 Transformer 的新方向

一、引言 在计算机视觉领域的发展历程中&#xff0c;卷积神经网络&#xff08;CNN&#xff09; 长期占据主导地位。从早期的 LeNet 到后来的 AlexNet、VGGNet、ResNet 等&#xff0c;CNN 在图像分类、目标检测、语义分割等任务中取得了显著成果。然而&#xff0c;CNN 在捕捉全…

【Leetcode 每日一题】2597. 美丽子集的数目

问题背景 给你一个由正整数组成的数组 n u m s nums nums 和一个 正 整数 k k k。 如果 n u m s nums nums 的子集中&#xff0c;任意两个整数的绝对差均不等于 k k k&#xff0c;则认为该子数组是一个 美丽 子集。 返回数组 n u m s nums nums 中 非空 且 美丽 的子集数…

常见Web应用源码泄露问题

文章目录 前言一、常见的源码泄露漏洞git源码泄露SVN源码泄露DS_Store文件泄漏网站备份压缩文件泄露WEB-INF/web.xml泄露CVS泄露.hg源码泄露Bazaar/bzr泄露.swp文件泄露 前言 在Web应用方面对于安全来说&#xff0c;可能大家对SQL注入、XSS跨站脚本攻击、文件上传等一些漏洞已…

记录一次wifi版有人物联串口服务器调试经过

1、首先买了一个华为的wifi路由器&#xff0c;连接上以后&#xff0c;设置好网络名字和wifi密码 2、用网线连接串口服务器&#xff0c;通过192.168.1.1登录&#xff0c;进行配置 找到无线客户端配置&#xff0c;先在基本配置中打开5G配置&#xff0c;然后再去5.8G配置中设置 …

Android 平台架构系统启动流程详解

目录 一、平台架构模块 1.1 Linux 内核 1.2 硬件抽象层 (HAL) 1.3 Android 运行时 1.4 原生 C/C 库 1.5 Java API 框架 1.6 系统应用 二、系统启动流程 2.1 Bootloader阶段 2.2 内核启动 2.3 Init进程&#xff08;PID 1&#xff09; 2.4 Zygote与System Serv…

【Windows下Gitbook快速入门使用】

Windows下Gitbook快速入门使用 1 工具安装1.1 Node.js下载安装1.1 环境变量1.2 npm配置1.3 安装gitbook 2 gitbook使用2.1 gitbook 无法执行2.2 gitbook常用命令 Gitbook是一个软件&#xff0c;使用Git和Markdown来编排书本&#xff1b; GitBook helps you pushlish beautiful …

RK3588V2--HYM8563TS RTC 实时时钟适配移植

1. 什么是RTC RTC&#xff08;Real-Time Clock&#xff0c;实时时钟&#xff09;是一种电子设备或芯片&#xff0c;它用于保持当前时间和日期&#xff0c;即使系统关闭或断电也能持续计时。RTC 通常用于计算机、嵌入式系统、物联网设备等需要精确时间管理的场景。 1.1 RTC 的…

MHA集群

一.MHA集群 MHA master high avavibility 主服务器高可用 如上图所示&#xff0c;我们之前说过&#xff0c;如果在主从复制架构中主服务器出现故障&#xff0c;就需要我们将从服务器作为主服务器&#xff0c;等故障的主服务器修复好之后&#xff0c;再将修好的主服务器作为从服…

10 【HarmonyOS NEXT】 仿uv-ui组件开发之Avatar头像组件开发教程(一)

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 目录 第一篇&#xff1a;Avatar 组件基础概念与设计1. 组件概述2. 接口设计2.1 形状类型定义2.2 尺寸类型定义2.3 组件属性接口 3. 设计原则4. 使用…