目录

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

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 事件)。