Skip to content

Basic Examples

This section shows basic usage of Apq.ChangeBubbling.

Create Node Tree

csharp
using Apq.ChangeBubbling.Nodes;

var root = new ListBubblingNode<object>("Root");
var users = new ListBubblingNode<User>("Users");
var settings = new DictionaryBubblingNode<string, object>("Settings");

root.AttachChild(users);
root.AttachChild(settings);

Subscribe to Changes

csharp
root.NodeChanged += (sender, change) =>
{
    Console.WriteLine($"[{change.Kind}] {change.NodeName}");
};

Operate List Node

csharp
users.Add(new User { Name = "Alice" });
users.Insert(0, new User { Name = "Bob" });
users.RemoveAt(0);

Operate Dictionary Node

csharp
settings.Put("Theme", "Dark");
settings.Put("FontSize", 14);

if (settings.TryGet("Theme", out var theme))
{
    Console.WriteLine($"Theme: {theme}");
}

settings.Remove("FontSize");

Complete Example

csharp
using Apq.ChangeBubbling.Nodes;

public class Program
{
    public static void Main()
    {
        var root = new ListBubblingNode<object>("Root");
        var users = new ListBubblingNode<User>("Users");
        var settings = new DictionaryBubblingNode<string, object>("Settings");

        root.AttachChild(users);
        root.AttachChild(settings);

        root.NodeChanged += (sender, change) =>
        {
            Console.WriteLine($"[{change.Kind}] {change.Path}");
        };

        users.Add(new User { Name = "Alice" });
        settings.Put("Theme", "Dark");

        Console.WriteLine($"Users: {users.Count}");
        Console.WriteLine($"Settings: {settings.Count}");
    }
}

Released under the MIT License