C# 关于当ObservableCollection增删查改元素时,触发事件用例

ObservableCollection 类提供了一种实时监测集合变化的机制,可以通过订阅 CollectionChanged 事件来响应集合的添加、移除和重置等变化。

csharp 复制代码
using System;
using System.Collections.ObjectModel;
using System.Collections.Specialized;

class Program
{
    static void Main()
    {
        ObservableCollection<string> collection = new ObservableCollection<string>();

        // 订阅 CollectionChanged 事件
        collection.CollectionChanged += Collection_CollectionChanged;

        // 向集合中添加元素
        collection.Add("item 1");
        collection.Add("item 2");
        collection.Add("item 3");

        // 从集合中移除元素
        collection.Remove("item 2");

        // 清空集合
        collection.Clear();
    }

    static void Collection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        if (e.Action == NotifyCollectionChangedAction.Add)
        {
            Console.WriteLine("元素已添加:");

            foreach (string item in e.NewItems)
            {
                Console.WriteLine(item);
            }
        }
        else if (e.Action == NotifyCollectionChangedAction.Remove)
        {
            Console.WriteLine("元素已移除:");

            foreach (string item in e.OldItems)
            {
                Console.WriteLine(item);
            }
        }
        else if (e.Action == NotifyCollectionChangedAction.Reset)
        {
            Console.WriteLine("集合已重置");
        }
    }
}

Tips

在 ObservableCollection 中,如果你更改了集合中的元素,例如修改了元素的属性,这将会触发 CollectionChanged 事件。

但是如果你只是替换了集合中的元素(即通过索引直接赋值),这将不会触发 CollectionChanged 事件

相关推荐
代钦塔拉5 小时前
Qt4 vs Qt5 带参数信号槽的连接方式详解
开发语言·数据库·qt
InfinteJustice7 小时前
踩坑分享C 语言文件操作全攻略:从基础读写到随机访问与缓冲区原理
c语言·开发语言·microsoft
码云数智-大飞7 小时前
滥用Lombok的@EqualsAndHashCode导致线上事故复盘
开发语言
yong99907 小时前
C# 实时查看硬件使用率(CPU 内存 硬盘 网络)
开发语言·网络·c#
不午休の野猫8 小时前
vs + qt环境编译.sln项目时报无法解析的外部符号metaObject && qt_metacast
开发语言·qt
吴声子夜歌8 小时前
Java——接口的细节
java·开发语言·算法
阿拉金alakin8 小时前
深入理解 Java 锁机制:CAS 原理、synchronized 优化与主流锁策略全总结
java·开发语言
myheartgo-on8 小时前
Java—方 法
java·开发语言·算法·青少年编程
雨落在了我的手上8 小时前
如何学习java?
java·开发语言·学习
神仙别闹9 小时前
基于 C# OpenPGP 的文件管理系统
开发语言·c#