public TabControlViewModel()
{
tools = new ObservableCollection<object>();
disposableVisibleObservers = new Dictionary<ToolViewModel, IDisposable>();
tools.CollectionChanged += (sender, e) =>
{
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
foreach (var item in e.NewItems)
{
if (item is ToolViewModel)
{
var tvm = item as ToolViewModel;
var disposable = tvm.IsVisibleObservable.Subscribe(_ => InvalidateIsVisible());
disposableVisibleObservers.Add(tvm, disposable);
}
}
InvalidateIsVisible();
break;
case NotifyCollectionChangedAction.Remove:
foreach (var item in e.OldItems)
{
if (item is ToolViewModel)
{
IDisposable disposable;
var tvm = item as ToolViewModel;
if (disposableVisibleObservers.TryGetValue(tvm, out disposable))
{
disposable.Dispose();
}
}
}
break;
}
};
}