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 用法简介的更多相关文章

  1. IOS NSInvocation用法简介

    IOS NSInvocation用法简介 2012-10-25 19:59 来源:博客园 作者:csj007523 字号:T|T [摘要]在 iOS中可以直接调用某个对象的消息方式有两种,其中一种就是 ...

  2. JodaTime用法简介

    JodaTime用法简介 Java的Date和Calendar用起来简直就是灾难,跟C#的DateTime差距太明显了,幸好有JodaTime 本文简单罗列JodaTime的用法 package co ...

  3. Apache自带压力测试工具ab用法简介

    ab命令原理 ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问.它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx.lighthttp ...

  4. Postman用法简介

    转自:http://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介 转载 2016年10月10日 09:04:10 10 ...

  5. MSSQL Sql加密函数 hashbytes 用法简介

    转自:http://www.maomao365.com/?p=4732 一.mssql sql hashbytes 函数简介 hashbytes函数功能为:返回一个字符,通过 MD2.MD4.MD5. ...

  6. java assert的用法简介【转】

    assert的基本用法 assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制,如C,C++和Eiffel等,但是支持的形式不尽相同,有的是通过语言本身.有的是通过库 ...

  7. glVertexAttribPointer 用法简介

    在内存中采用交叉模式存储,向gpu传入顶点数据的方法  GPU: #version 100 attribute highp vec2 aPosition; attribute highp vec2 a ...

  8. C#中IPAddress类/Dns类/IPHostEntry类/IPEndPoint用法简介

    C#中IPAddress类/Dns类/IPHostEntry类/IPEndPoint用法简介 IP是一种普遍应用于因特网.允许不同主机能够相互找到对方的寻址协议.IP地址由4个十进制的数字号码所组成, ...

  9. Postman用法简介----https://blog.csdn.net/flowerspring/article/details/52774399

    https://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介

  10. SpringBoot系列之@Conditional注解用法简介

    SpringBoot系列之@Conditional注解用法简介 引用Spring官方文档的说法介绍一下@Conditional注解:Spring5.0.15版本@Conditional注解官方文档 @ ...

随机推荐

  1. 离线安装Docker社区版详细教程

    Docker是一个开源的应用容器引擎,使得开发者可以打包应用以及依赖包到一个轻量级的.可移植的容器中,然后发布到任何支持Docker的平台上.本文将详细介绍如何在离线环境下安装Docker社区版. 1 ...

  2. 如何测试网络是否支持ipv6地址?如何打开ipv6?

    疑难解答加微信机器人,给它发:进群,会拉你进入八米交流群 机器人微信号:bamibot 简洁版教程访问:https://bbs.8miyun.cn 一.什么是IPv6: 1.IPv6简介: IPv6是 ...

  3. 大量小文件不适合存储于HDFS的原因

    1.小文件过多,会过多占用namenode的内存,并浪费block. - 文件的元数据(包括文件被分成了哪些blocks,每个block存储在哪些服务器的哪个block块上),都是存储在namenod ...

  4. 大数据之路Week10_day05 (Redis的安装与简单命令使用)

    Redis 支持单机版和集群,下面的步骤是单机版安装步骤 redis3.0.0版本的安装包百度云链接: 链接:https://pan.baidu.com/s/1mb_SdU5hHlrmUkWN7Drx ...

  5. Halcon学习教程(二) 测量量测相关(点到线距离,线到线距离,轮廓线距离,一维测量,圆形测量,矩形测量等)

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/18740576 本篇讲一些测量用到的算子和实例,想了解更多就得去看看halcon实例里一维测量里 ...

  6. redis bind protected-mode

    概要 redis bind.protected-mode 配置 安装并启动 yum install -y redis systemctl enable --now redis # 使用 redis-s ...

  7. 关于JS框架的一点想法

    读了几页<vue.js设计与实现>,记录几点想法: 1.Html是根本 2.无论哪个框架,不管是运行时框架,还是编译时框架,最终都要通过标签"绘制"页面 3.这个&qu ...

  8. RealityCapture重建试验

    一.使用已有数据集 (一)小型物件(官网) 输入:Camera_Lubitel2_studio "Lubitel Camera" consisting of 72 images 地 ...

  9. java真是一门丑陋的语言,我都new Thread.run了然后你告诉我是在当前线程中运行

    new Thread(x->{}).run(); 上方代码怎么看都应该是要开启新线程的,毕竟都已经new了.但是上方代码居然是在当前线程中运行!想要开启新线程得用.start()方法,如下: n ...

  10. ModuleNotFoundError: No module named '_ctypes' when Python3

    前言 运行 python 报错:ModuleNotFoundError: No module named '_ctypes' when using Value from module multipro ...