• 附加属性作用于多选控件,用于获取所有选中项


        using System.Collections;
        using System.Windows;
        using System.Windows.Controls;
        using System.Windows.Controls.Primitives;
        /// <summary>
        /// 附加属性作用于多选控件,用于获取所有选中项
        /// </summary>
        public static class SelectorExt
        {
    
            public static readonly DependencyProperty SelectedItemsProperty =
                DependencyProperty.RegisterAttached("SelectedItems", typeof(IList), typeof(SelectorExt), new PropertyMetadata(OnSelectedItemsChanged));
            public static IList GetSelectedItems(DependencyObject obj)
            {
                return obj.GetValue(SelectedItemsProperty) as IList;
            }
    
            public static void SetSelectedItems(DependencyObject obj, IList value)
            {
                obj.SetValue(SelectedItemsProperty, value);
            }
    
            private static void OnSelectedItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                if (d == null) return;
                //MultiSelector
                MultiSelector multiSelector = d as MultiSelector;
                if (multiSelector != null)
                {
                    multiSelector.SelectionChanged -= MultiSelector_SelectionChanged;
                    multiSelector.SelectedItems.Clear();
                    if ((e.NewValue as IList) != null)
                    {
                        foreach (object item in e.NewValue as IList)
                        {
                            multiSelector.SelectedItems.Add(item);
                        }
                    }
                    multiSelector.SelectionChanged += MultiSelector_SelectionChanged;
                    return;
                }
    
                ListBox listbox = d as ListBox;//增加Listbox多选附加,ListView继承ListBox,也可以使用
                if (listbox != null)
                {
                    listbox.SelectionChanged -= MultiSelector_SelectionChanged;
                    listbox.SelectedItems.Clear();
                    if ((e.NewValue as IList) != null)
                    {
                        foreach (object item in e.NewValue as IList)
                        {
                            listbox.SelectedItems.Add(item);
                        }
                    }
                    listbox.SelectionChanged += MultiSelector_SelectionChanged;
                    return;
                }
            }
            private static void MultiSelector_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                IList source = GetSelectedItems(sender as DependencyObject);
                if (source == null) return;
                foreach (var item in e.AddedItems) source.Add(item);        //添加选中的项
                foreach (var item in e.RemovedItems) source.Remove(item);   //移除选中项
            }
        }
  • 相关阅读:
    二叉树重建leetcode
    leetcode 字符串
    leetcode first missing positive,覆盖区间
    leetcode 较难题
    Linq分页
    Linq 数据库通用的操作类
    .Net3.5扩展方法实现对象JSON序列化
    js 判断输入内容(主要针对汉字)的字节长度
    div 内table 居中
    Linq增、删、改、查
  • 原文地址:https://www.cnblogs.com/wandia/p/14084097.html
Copyright © 2020-2023  润新知