INotifyCollectionChanged 用法简介
INotifyCollectionChanged 接口是 System.Collections.Specialized 命名空间中的一个接口,用于在集合发生更改时通知订阅者。这个接口通常在实现了集合的类中使用,以便在集合变化时通知监听者(如 UI 控件)进行更新。
以下是 INotifyCollectionChanged 的关键成员:
CollectionChanged 事件: 当集合发生变化时触发的事件。这个事件包含一个 NotifyCollectionChangedEventArgs 参数,该参数提供了有关集合变化的详细信息,如变化的类型(添加、移除、替换等)、受影响的索引和元素。
NotifyCollectionChangedEventArgs 类: 包含有关集合变化的详细信息的类。常见的属性包括:
Action:表示变化的类型,是一个 NotifyCollectionChangedAction 枚举值,包括 Add、Remove、Replace、Move 和 Reset。
NewItems:在 Add、Replace 和 Move 操作中,表示添加或替换的新元素的集合。
OldItems:在 Remove、Replace 和 Move 操作中,表示移除或替换的旧元素的集合。
NewStartingIndex 和 OldStartingIndex:在 Move 操作中,表示移动操作的起始索引。
using System;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
public class ExampleCollection : ObservableCollection<string>
{
public ExampleCollection()
{
this.CollectionChanged += OnCollectionChanged;
}
private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
Console.WriteLine($"Collection changed: {e.Action}");
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
Console.WriteLine($"Added item(s): {string.Join(", ", e.NewItems)}");
break;
case NotifyCollectionChangedAction.Remove:
Console.WriteLine($"Removed item(s): {string.Join(", ", e.OldItems)}");
break;
case NotifyCollectionChangedAction.Replace:
Console.WriteLine($"Replaced item(s): {string.Join(", ", e.NewItems)}");
break;
case NotifyCollectionChangedAction.Move://
Console.WriteLine($"Moved item(s) from index {e.OldStartingIndex} to {e.NewStartingIndex}");
break;
case NotifyCollectionChangedAction.Reset://整个集合被重置,即调用Clear方法,而不是重新赋值为另一个对象!例如a = new ObservableCollection<int>() { 3, 4, 5 };
Console.WriteLine("Collection was reset");
break;
}
}
}
class Program
{
static void Main()
{
ExampleCollection collection = new ExampleCollection();
collection.Add("Item 1");
collection.Add("Item 2");
collection.Remove("Item 1");
collection[0] = "New Item 1";
}
}

static void Main(){
var a = new ObservableCollection<int>();
a.CollectionChanged += A_CollectionChanged;
a.Add(1);
a.RemoveAt(0);
a.Add(3);
a.Add(5);
//a = new ObservableCollection<int>() { 3, 4, 5 };//不会触发Reset事件
a.Clear();
a.Add(3);
a.Add(4);
a.Move(1, 0);
}
private static void A_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
Console.WriteLine($"Collection changed: {e.Action}");
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
Console.WriteLine($"Added item(s): {string.Join(", ", e.NewItems)}");
break;
case NotifyCollectionChangedAction.Remove:
Console.WriteLine($"Removed item(s): {string.Join(", ", e.OldItems)}");
break;
case NotifyCollectionChangedAction.Replace:
Console.WriteLine($"Replaced item(s): {string.Join(", ", e.NewItems)}");
break;
case NotifyCollectionChangedAction.Move://
Console.WriteLine($"Moved item(s) from index {e.OldStartingIndex} to {e.NewStartingIndex}");
break;
case NotifyCollectionChangedAction.Reset://整个集合被重置
Console.WriteLine("Collection was reset");
break;
}
}

INotifyCollectionChanged 用法简介的更多相关文章
- IOS NSInvocation用法简介
IOS NSInvocation用法简介 2012-10-25 19:59 来源:博客园 作者:csj007523 字号:T|T [摘要]在 iOS中可以直接调用某个对象的消息方式有两种,其中一种就是 ...
- JodaTime用法简介
JodaTime用法简介 Java的Date和Calendar用起来简直就是灾难,跟C#的DateTime差距太明显了,幸好有JodaTime 本文简单罗列JodaTime的用法 package co ...
- Apache自带压力测试工具ab用法简介
ab命令原理 ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问.它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx.lighthttp ...
- Postman用法简介
转自:http://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介 转载 2016年10月10日 09:04:10 10 ...
- MSSQL Sql加密函数 hashbytes 用法简介
转自:http://www.maomao365.com/?p=4732 一.mssql sql hashbytes 函数简介 hashbytes函数功能为:返回一个字符,通过 MD2.MD4.MD5. ...
- java assert的用法简介【转】
assert的基本用法 assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制,如C,C++和Eiffel等,但是支持的形式不尽相同,有的是通过语言本身.有的是通过库 ...
- glVertexAttribPointer 用法简介
在内存中采用交叉模式存储,向gpu传入顶点数据的方法 GPU: #version 100 attribute highp vec2 aPosition; attribute highp vec2 a ...
- C#中IPAddress类/Dns类/IPHostEntry类/IPEndPoint用法简介
C#中IPAddress类/Dns类/IPHostEntry类/IPEndPoint用法简介 IP是一种普遍应用于因特网.允许不同主机能够相互找到对方的寻址协议.IP地址由4个十进制的数字号码所组成, ...
- Postman用法简介----https://blog.csdn.net/flowerspring/article/details/52774399
https://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介
- SpringBoot系列之@Conditional注解用法简介
SpringBoot系列之@Conditional注解用法简介 引用Spring官方文档的说法介绍一下@Conditional注解:Spring5.0.15版本@Conditional注解官方文档 @ ...
随机推荐
- autMan奥特曼机器人-自建autMan插件市场
一.自建市场配置 配置参数 二.上架设置 设置哪些插件上架,哪些不上架 三.检测是否成功 怎样检查是否成功了?订阅一下自己,然后看应用市场上是否显示 四.用户怎样购买插件 用户想买自建市场作者的插件, ...
- Java01 - Scanner对象
简介 之前我们学的基本语法中并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入.java.util.Scanner是Java5的新特征,我们可以通过Scanner ...
- WPF无边框的一个方案(保留默认窗口的拖动、阴影等效果)
使用 WindowStyle="None" AllowsTransparency="True" 的方式达成无边框的效果有很多无法忽视的缺陷,比如失去了拖动效果. ...
- 【2022_12_2】Fibersim安装记录
Fibersim 安装记录 1. 为什么要写这个文章? 因为我前前后后装了四天才装成功.在我的电脑上,fibersim14 16 17 15 挂到UG10 12 CatiaV5-6R2019 2018 ...
- 【Matlab函数】提取inp文件中的节点、单元数据并保留集合信息
功能 提取hypermesh2020(其他版本也可以)中的节点.单元信息,并保留elem set信息. 返回的是一个结构体 输入输出参数 输入: inp文件路径,如:'example.inp'.&qu ...
- 编写你的第一个 Django 应用程序,第3部分
本教程从教程 2 停止的地方开始.我们是 继续网络投票应用程序,并将专注于创建公众界面 – "视图". 在我们的投票应用程序中,我们将有以下四个视图: 问题"索引&quo ...
- ORACLE数据挖掘之 MSET-SPRT
虽然是熟悉的Oracle数据库,但关于机器学习.数据挖掘这方面的知识笔者起初也是不了解的,文中MSET相关设置来源于同事提供的sample,在测试过程中边查资料边学习吸收,也因此看到了别样的Oracl ...
- 启动oracle 服务
-- 参考(https://blog.csdn.net/loongshawn/article/details/51162196) 1.启动oracle的步骤 Linux下启动oracle分为以下两步: ...
- C 图上的遍历算法
图上的遍历算法 广度优先搜索 BFS 概念 广度优先搜索(Breadth-First Search)是一种图遍历算法,用于在图或树中按层次逐层访问节点.它从源节点(起始节点)开始,首先访问源节点的所有 ...
- SpringSecurity5(14-Gateway整合)
MVC 与 WebFlux 关系 SpringSecurity 设置要采用响应式配置,基于 WebFlux 中 WebFilter 实现,与 Spring MVC 的 Security 是通过 Ser ...