71 lines
2.6 KiB
C#
71 lines
2.6 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Windows;
|
|||
|
|
using System.Windows.Controls.Primitives;
|
|||
|
|
|
|||
|
|
namespace Szmedi.RvKits.AttachProps
|
|||
|
|
{
|
|||
|
|
class BindingSelectItems
|
|||
|
|
{
|
|||
|
|
public static IList GetSelectItemsAttach(DependencyObject obj)
|
|||
|
|
{
|
|||
|
|
return (IList)obj.GetValue(SelectItemsAttachProperty);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void SetSelectItemsAttach(DependencyObject obj, IList value)
|
|||
|
|
{
|
|||
|
|
obj.SetValue(SelectItemsAttachProperty, value);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Using a DependencyProperty as the backing store for SelectItemsAttach. This enables animation, styling, binding, etc...
|
|||
|
|
public static readonly DependencyProperty SelectItemsAttachProperty =
|
|||
|
|
DependencyProperty.RegisterAttached("SelectItemsAttach", typeof(IList), typeof(BindingSelectItems), new PropertyMetadata(null));
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
public static bool GetSelectedChange(DependencyObject obj)
|
|||
|
|
{
|
|||
|
|
return (bool)obj.GetValue(SelectedChangeProperty);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void SetSelectedChange(DependencyObject obj, bool value)
|
|||
|
|
{
|
|||
|
|
obj.SetValue(SelectedChangeProperty, value);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Using a DependencyProperty as the backing store for SelectedChange. This enables animation, styling, binding, etc...
|
|||
|
|
public static readonly DependencyProperty SelectedChangeProperty =
|
|||
|
|
DependencyProperty.RegisterAttached("SelectedChange", typeof(bool), typeof(BindingSelectItems), new PropertyMetadata(false, SelectedChangedCallBack));
|
|||
|
|
|
|||
|
|
private static void SelectedChangedCallBack(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (d is MultiSelector)
|
|||
|
|
{
|
|||
|
|
MultiSelector multiSelector = (MultiSelector)d;
|
|||
|
|
if ((bool)e.NewValue)
|
|||
|
|
{
|
|||
|
|
multiSelector.SelectionChanged += MultiSelector_SelectionChanged;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
multiSelector.SelectionChanged -= MultiSelector_SelectionChanged;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
throw new InvalidOperationException();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private static void MultiSelector_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
|
|||
|
|
{
|
|||
|
|
MultiSelector multiSelector = (MultiSelector)sender;
|
|||
|
|
SetSelectItemsAttach(multiSelector, multiSelector.SelectedItems);
|
|||
|
|
System.Windows.Data.BindingExpression bind = multiSelector.GetBindingExpression(SelectItemsAttachProperty);
|
|||
|
|
bind?.UpdateSource();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|