/// <summary>
        ///     Handles changes to the BindableSelection property.
        /// </summary>
        /// <param name="d">
        ///     The <see cref="DependencyObject" /> on which
        ///     the property has changed value.
        /// </param>
        /// <param name="e">
        ///     Event data that is issued by any event that
        ///     tracks changes to the effective value of this property.
        /// </param>
        private static void OnBindableSelectionChanged(
            DependencyObject d,
            DependencyPropertyChangedEventArgs e)
        {
            var oldBindableSelection = e.OldValue;
            var newBindableSelection = GetBindableSelection(d);

            if (oldBindableSelection != null)
            {
                var handler = GetBindableSelectionHandler(d);
                SetBindableSelectionHandler(d, null);
                handler.Detach();
            }

            if (newBindableSelection != null)
            {
                var handler = new ListViewBindableSelectionHandler(
                    (ListViewBase)d, newBindableSelection);
                SetBindableSelectionHandler(d, handler);
            }
        }
 /// <summary>
 ///     Sets the BindableSelectionHandler property. This dependency property
 ///     indicates BindableSelectionHandler for a ListView - used to manage synchronization of BindableSelection and
 ///     SelectedItems.
 /// </summary>
 public static void SetBindableSelectionHandler(
     DependencyObject d,
     ListViewBindableSelectionHandler value)
 {
     d.SetValue(BindableSelectionHandlerProperty, value);
 }