private void AddSelection(SelectableViewModel selectable)
        {
            selectionOrder.Add(selectable);

            if (selectionOrder.Count > maximumSelectedCount)
            {
                selectionOrder[0].IsSelected = false;
            }
        }
        private void OnIsSelectedChanged(object sender, EventArgs e)
        {
            SelectableViewModel selectable = sender as SelectableViewModel;

            if (selectable.IsSelected)
            {
                AddSelection(selectable);
            }
            else
            {
                RemoveSelection(selectable);
            }

            RaiseSelectionChanged();
        }
        private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            SelectableViewModel selectable = e.Item as SelectableViewModel;

            if (e.Action == NotifyCollectionChangedAction.Remove)
            {
                RemoveSelection(selectable);
                selectable.IsSelectedChanged -= OnIsSelectedChanged;
            }
            else if (e.Action == NotifyCollectionChangedAction.Add)
            {
                if (selectable.IsSelected)
                {
                    AddSelection(selectable);
                }

                selectable.IsSelectedChanged += OnIsSelectedChanged;
            }
            else
            {
                throw new Exception("Unsupported collection action");
            }
        }
 private void RemoveSelection(SelectableViewModel selectable)
 {
     selectionOrder.Remove(selectable);
 }