添加项目文件。
This commit is contained in:
82
Wpf.Ui.Extend/UserControls/MultiSelectorHelper.cs
Normal file
82
Wpf.Ui.Extend/UserControls/MultiSelectorHelper.cs
Normal file
@@ -0,0 +1,82 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Controls.Primitives;
|
||||
|
||||
namespace Wpf.Ui.Extend.UserControls
|
||||
{
|
||||
/// <summary>
|
||||
/// 多选控件绑定选中项
|
||||
/// </summary>
|
||||
/// <example>
|
||||
/// <c><DataGrid</c>
|
||||
/// <c>local:MultiSelectorHelper.BindableSelectedItems="{Binding SelectItems, Mode=OneWayToSource}"</c>
|
||||
/// <c>local:MultiSelectorHelper.MonitorSelectionChanged="True" /></c>
|
||||
/// </example>
|
||||
public class MultiSelectorHelper : DependencyObject
|
||||
{
|
||||
public static readonly DependencyProperty BindableSelectedItemsProperty = DependencyProperty.Register(
|
||||
"BindableSelectedItems",
|
||||
typeof(IList),
|
||||
typeof(MultiSelectorHelper),
|
||||
new PropertyMetadata(default(IList))
|
||||
);
|
||||
|
||||
public static IList GetBindableSelectedItems(DependencyObject obj)
|
||||
{
|
||||
return (IList)obj.GetValue(BindableSelectedItemsProperty);
|
||||
}
|
||||
|
||||
public static void SetBindableSelectedItems(DependencyObject obj, IList value)
|
||||
{
|
||||
obj.SetValue(BindableSelectedItemsProperty, value);
|
||||
}
|
||||
|
||||
public static readonly DependencyProperty MonitorSelectionChangedProperty = DependencyProperty.RegisterAttached(
|
||||
"SetMonitorSelectionChanged",
|
||||
typeof(bool),
|
||||
typeof(MultiSelectorHelper),
|
||||
new PropertyMetadata(false, MonitorSelectionChangedPropertyChangedCallBack)
|
||||
);
|
||||
|
||||
private static void MonitorSelectionChangedPropertyChangedCallBack(
|
||||
DependencyObject d,
|
||||
DependencyPropertyChangedEventArgs e
|
||||
)
|
||||
{
|
||||
if (d is not MultiSelector selector)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
if ((bool)e.NewValue)
|
||||
{
|
||||
selector.SelectionChanged += Selector_SelectionChanged;
|
||||
}
|
||||
else
|
||||
{
|
||||
selector.SelectionChanged -= Selector_SelectionChanged;
|
||||
}
|
||||
}
|
||||
|
||||
private static void Selector_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (sender is MultiSelector selector)
|
||||
{
|
||||
SetBindableSelectedItems(selector, selector.SelectedItems);
|
||||
selector.GetBindingExpression(BindableSelectedItemsProperty).UpdateSource();
|
||||
}
|
||||
}
|
||||
|
||||
public static void SetMonitorSelectionChanged(DependencyObject element, bool value)
|
||||
{
|
||||
element.SetValue(MonitorSelectionChangedProperty, value);
|
||||
}
|
||||
|
||||
public static bool GetMonitorSelectionChanged(DependencyObject element)
|
||||
{
|
||||
return (bool)element.GetValue(MonitorSelectionChangedProperty);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user