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);
}