private void Children_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { switch (e.Action) { case System.Collections.Specialized.NotifyCollectionChangedAction.Add: e.NewItems.ForEach(x => { var comp = (DashboardComponent)x; DashboardViewBase elem = GetNewViewFor(comp); if (elem == null) { return; //DEBUG } viewBindings.Add(comp, elem); AddView(elem); }); break; case System.Collections.Specialized.NotifyCollectionChangedAction.Remove: e.OldItems.ForEach(x => { var comp = (DashboardComponent)x; RemoveView(viewBindings[comp]); viewBindings.Remove(comp); }); break; case System.Collections.Specialized.NotifyCollectionChangedAction.Replace: e.OldItems.ForEach(x => { var comp = (DashboardComponent)x; RemoveView(viewBindings[comp]); viewBindings.Remove(comp); }); e.NewItems.ForEach(x => { var comp = (DashboardComponent)x; DashboardViewBase elem = GetNewViewFor(comp); viewBindings.Add(comp, elem); AddView(elem); }); break; case System.Collections.Specialized.NotifyCollectionChangedAction.Reset: viewBindings.Clear(); ClearView(); Component.Children.ForEach(x => { DashboardViewBase elem = GetNewViewFor(x); if (elem == null) { return; //DEBUG } viewBindings.Add(x, elem); AddView(elem); }); break; } }
protected override void AddView(DashboardViewBase element) { var tab = new TabItem(); tab.Tag = element; tab.Content = element; Binding binding = new Binding("Name"); binding.Source = element.DataContext; tab.SetBinding(TabItem.HeaderProperty, binding); root.Items.Add(tab); }
protected override void RemoveView(DashboardViewBase element) { for (int i = root.Items.Count - 1; i >= 0; i--) { if (root.Items[i] is TabItem item) { if (item.Tag == element) { root.Items.RemoveAt(i); } } } }
protected override void RemoveView(DashboardViewBase element) { root.Children.Remove(element); }
protected override void AddView(DashboardViewBase element) { root.Children.Add(element); }
protected abstract void RemoveView(DashboardViewBase element);
protected abstract void AddView(DashboardViewBase element);