/// <summary>
        /// Handles disposal and creation of old and new bindings
        /// </summary>
        private static void OnSelectedItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            if (!(d is ListBox || d is MultiSelector))
            {
                throw new ArgumentException("The property 'SelectedItems' may only be set on ListBox or MultiSelector elements.");
            }

            if (e.OldValue != e.NewValue)
            {
                var oldBinding = GetSelectedItemBinding(d);
                oldBinding?.UnBind();

                var multiSelectorBinding = new MultiSelectorBinding((Selector)d, (IList)e.NewValue);
                SetSelectedItemBinding(d, multiSelectorBinding);
                multiSelectorBinding.Bind();
            }
        }
 private static void SetSelectedItemBinding(DependencyObject element, MultiSelectorBinding value)
 {
     element.SetValue(SelectedItemBindingProperty, value);
 }