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