Program.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using Apq.ChangeBubbling.Core;
  2. using Apq.ChangeBubbling.Nodes;
  3. using Apq.ChangeBubbling.Messaging;
  4. using Apq.ChangeBubbling.Abstractions;
  5. Console.WriteLine("=== Apq.ChangeBubbling 示例 ===\n");
  6. // 示例 1: 基本用法 - 创建节点树
  7. Console.WriteLine("1. 创建节点树并订阅变更事件:");
  8. var root = new ListBubblingNode<string>("Root");
  9. var child = new ListBubblingNode<int>("Child");
  10. // 建立父子关系
  11. root.AttachChild(child);
  12. // 订阅变更事件
  13. root.NodeChanged += (sender, change) =>
  14. {
  15. Console.WriteLine($" 变更: {change.PropertyName}, 类型: {change.Kind}, 路径: {string.Join(".", change.PathSegments)}");
  16. };
  17. // 子节点的变更会自动冒泡到父节点
  18. Console.WriteLine(" 添加元素到子节点:");
  19. child.Add(42);
  20. child.Add(100);
  21. // 示例 2: 使用 Rx 响应式流
  22. Console.WriteLine("\n2. 使用 Rx 响应式流:");
  23. using var subscription = ChangeMessenger.AsObservable()
  24. .Subscribe(change => Console.WriteLine($" Rx 收到变更: {change.PropertyName}, 类型: {change.Kind}"));
  25. // 发布变更到消息中心
  26. var bubblingChange = new BubblingChange
  27. {
  28. PropertyName = "TestProperty",
  29. Kind = NodeChangeKind.PropertyUpdate,
  30. OldValue = null,
  31. NewValue = "NewValue",
  32. PathSegments = new[] { "Root", "TestProperty" }
  33. };
  34. ChangeMessenger.Publish(bubblingChange);
  35. // 示例 3: 批量操作
  36. Console.WriteLine("\n3. 批量操作:");
  37. child.BeginBatch();
  38. child.Add(200);
  39. child.Add(300);
  40. child.Add(400);
  41. child.EndBatch(); // 批量结束时触发一次合并事件
  42. Console.WriteLine("\n=== 示例完成 ===");