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

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.kler.cn/a/577556.html

相关文章:

  • 虚幻基础:动画层接口
  • 最小栈 _ _
  • 【Ant Design X Vue】Vue 首个 AI 组件库发布!
  • HJ C++11 Day2
  • LeetCode - 神经网络的 反向传播(Sigmoid + MSE) 教程
  • SpringBoot过滤器(Filter)的使用:Filter接口、FilterRegistrationBean类配置、@WebFilter注释
  • 深入浅出解析 FreeRTOS 软件定时器 定时器服务任务:机制、API 详解及实践应用
  • Selenium遇到Exception自动截图
  • 刷题记录(LeetCode452 用最少数量的箭引爆气球)
  • DeepSeek×博云AIOS:突破算力桎梏,开启AI普惠新纪元
  • 【docker远程响应】
  • 解决电脑问题(8)——网络问题
  • 【竞技宝】LOL:Kanavi备战全球先锋赛苦练新打野?
  • 【音视频】RTP封包H265信息
  • VS2022安装Framework 4.0和.NET Framework 4.5
  • XMall商城listSearch存在SQL注入漏洞(DVB-2025-8924)
  • 启动/关闭jar服务shell脚本【Linux】
  • 系统架构设计师—系统架构设计篇—架构设计与生命周期
  • 配置 Thunderbird 以使用 QQ 邮箱
  • 打造智能聊天体验:前端集成 DeepSeek AI 助你快速上手