Skip to content

快速开始

本指南将帮助你在 5 分钟内上手 Apq.ChangeBubbling。

安装

使用 .NET CLI 安装:

bash
dotnet add package Apq.ChangeBubbling

或在项目文件中添加:

xml
<PackageReference Include="Apq.ChangeBubbling" Version="1.0.*" />

创建第一个节点树

csharp
using Apq.ChangeBubbling.Nodes;

// 创建根节点
var root = new ListBubblingNode<string>("Root");

// 创建子节点
var users = new ListBubblingNode<string>("Users");
var settings = new DictionaryBubblingNode<string, int>("Settings");

// 建立父子关系
root.AttachChild(users);
root.AttachChild(settings);

订阅变更事件

csharp
// 在根节点订阅,可以接收所有子节点的变更
root.NodeChanged += (sender, change) =>
{
    Console.WriteLine($"节点: {change.NodeName}");
    Console.WriteLine($"属性: {change.PropertyName}");
    Console.WriteLine($"类型: {change.Kind}");
    Console.WriteLine($"路径: {string.Join(".", change.PathSegments)}");
    Console.WriteLine("---");
};

触发变更

csharp
// 添加用户
users.Add("Alice");
users.Add("Bob");

// 设置配置
settings.Put("MaxRetries", 3);
settings.Put("Timeout", 5000);

输出:

节点: Users
属性: 0
类型: CollectionAdd
路径: Users.0
---
节点: Users
属性: 1
类型: CollectionAdd
路径: Users.1
---
节点: Settings
属性: MaxRetries
类型: CollectionAdd
路径: Settings.MaxRetries
---
节点: Settings
属性: Timeout
类型: CollectionAdd
路径: Settings.Timeout
---

使用 Rx 响应式流

csharp
using Apq.ChangeBubbling.Messaging;
using System.Reactive.Linq;

// 订阅所有变更
ChangeMessenger.AsObservable()
    .Where(c => c.Kind == NodeChangeKind.CollectionAdd)
    .Subscribe(change =>
    {
        Console.WriteLine($"新增: {change.PropertyName}");
    });

// 节流订阅(100ms 内只处理一次)
ChangeMessenger.AsThrottledObservable(TimeSpan.FromMilliseconds(100))
    .Subscribe(change =>
    {
        Console.WriteLine($"节流后: {change.PropertyName}");
    });

批量操作

csharp
var node = new ListBubblingNode<int>("Numbers");

// 开始批量操作
node.BeginBatch();
try
{
    for (int i = 0; i < 1000; i++)
    {
        node.Add(i);
    }
}
finally
{
    // 结束批量操作,一次性触发所有事件
    node.EndBatch();
}

下一步

基于 MIT 许可发布