zoukankan      html  css  js  c++  java
  • 附加属性作用于多选控件,用于获取所有选中项

        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);   //移除选中项
            }
        }
  • 相关阅读:
    java多线程为什么要用while而不是if
    爆竹声响,新人入场
    java多线程状态转换
    java接口的方法默认都是public abstract类型
    java中的静态static关键字
    我的第一个python爬虫程序
    python爬取某些网站出错的解决办法
    spring
    hibernate中文乱码问题
    eclipse(Version: Neon Release (4.6.0))安装hibernate tools
  • 原文地址:https://www.cnblogs.com/wandia/p/14084097.html
Copyright © 2011-2022 走看看