public void SubscribeToChildren() { var observable = new SomeObservable(); var existinChild = new SomeOtherObservable(); observable.Children.Add(existinChild); int numChildrenChanged = 0; int numChildrenAdded = 0; int numChildrenRemoved = 0; observable.Children.SynchronizeForLifetime( (c) => { c.SynchronizeForLifetime(nameof(SomeOtherObservable.Name), () => { numChildrenChanged++; } , observable.Children.GetMembershipLifetime(c)); numChildrenAdded++; }, (c) => { numChildrenRemoved++; }, () => { }, observable); var newItem = new SomeOtherObservable(); observable.Children.Add(newItem); Assert.AreEqual(2, numChildrenChanged); existinChild.Name = "Change"; Assert.AreEqual(3, numChildrenChanged); newItem.Name = "Second change"; Assert.AreEqual(4, numChildrenChanged); observable.Children.Remove(existinChild); existinChild.Name = "Ignored change"; Assert.AreEqual(4, numChildrenChanged); observable.Children.Remove(newItem); newItem.Name = "Ignored change"; Assert.AreEqual(4, numChildrenChanged); Assert.AreEqual(2, numChildrenAdded); Assert.AreEqual(2, numChildrenRemoved); }
public void SubscribeToChildren() { var observable = new SomeObservable(); var existinChild = new SomeOtherObservable(); observable.Children.Add(existinChild); int numChildrenChanged = 0; int numChildrenAdded = 0; int numChildrenRemoved = 0; observable.Children.SynchronizeForLifetime( (c) => { c.SynchronizeForLifetime(nameof(SomeOtherObservable.Name), () => { numChildrenChanged++; } , observable.Children.GetMembershipLifetime(c)); numChildrenAdded++; }, (c) => { numChildrenRemoved++; }, () => { }, observable.LifetimeManager); var newItem = new SomeOtherObservable(); observable.Children.Add(newItem); Assert.AreEqual(2, numChildrenChanged); existinChild.Name = "Change"; Assert.AreEqual(3, numChildrenChanged); newItem.Name = "Second change"; Assert.AreEqual(4, numChildrenChanged); observable.Children.Remove(existinChild); existinChild.Name = "Ignored change"; Assert.AreEqual(4, numChildrenChanged); observable.Children.Remove(newItem); newItem.Name = "Ignored change"; Assert.AreEqual(4, numChildrenChanged); Assert.AreEqual(2, numChildrenAdded); Assert.AreEqual(2, numChildrenRemoved); }