private void ItemsChanged(object sender, NotifyCollectionChangedEventArgs e) { switch (e.Action) { case NotifyCollectionChangedAction.Add: foreach (var eNewItem in e.NewItems) { var newPayload = eNewItem as T; var newHex = _space.Add(newPayload); RenderChild(newHex, newPayload); } break; case NotifyCollectionChangedAction.Move: break; case NotifyCollectionChangedAction.Remove: foreach (var removedPayload in e.OldItems) { var hexPayloadToRemove = _space.Elements().FirstOrDefault(pair => pair.Value == removedPayload); var hexToRemove = hexPayloadToRemove.Key; _space.Remove(hexToRemove); var viewToRemove = GetViewForHex(hexToRemove); _content.Children.Remove(viewToRemove); } break; case NotifyCollectionChangedAction.Replace: break; case NotifyCollectionChangedAction.Reset: _space.Clear(); _content.Children.Clear(); break; default: throw new ArgumentOutOfRangeException(); } }