Files
SzmediTools/Szmedi.RvKits/AttachProps/BindingSelectItems.cs
2025-09-16 16:06:41 +08:00

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();
}
}
}