void AdaptiveSelector_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            foreach (var item in e.RemovedItems)
            {
                var to_remove =
                    (from sm in SelectionMarkers
                     where !sm.IsDragging && object.Equals(sm.Item, item)
                     select sm).ToArray();

                foreach (var td in to_remove)
                    SelectionMarkers.Remove(td);
            }

            foreach (var item in e.AddedItems)
            {
                var existing_marker =
                    (from sm in SelectionMarkers
                     where object.Equals(sm.Item, item)
                     select sm).FirstOrDefault();

                if (existing_marker != null)
                    continue;

                var new_marker = new SelectionMarker() { Item = item };
                SelectionMarkers.Add(new_marker);


                var group = (object) SelectorLogic.GetItemGroup(this, SelectorIdentifier, item);

                if (group != null)
                {
                    // disable others within same group
                    var other_with_same_group =
                        (from si in this.SelectedItems.Cast<object>()
                         let si_group = SelectorLogic.GetItemGroup(this, SelectorIdentifier, si)
                             // same group, different item
                         where object.Equals(si_group, @group) && !ItemEqualityComparer.Equals(si, item)
                         select si).ToList();


                    foreach (var rem in other_with_same_group)
                    {
                        SelectedItems.Remove(rem);
                    }
                }
            }

            // make sure only one item from single-selection groups is selected at the time
        }
        void RefreshMarker(SelectionMarker marker)
        {
            var offset = GetOffset(marker.Item);

            marker.Left = offset;

            var width = GetThumbWidth(marker.Item);

            marker.Width = width;
        }