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);   //移除选中项
            }
        }
  • 相关阅读:
    [JavaWeb基础] 001.简单的JavaWeb代码和Tomcat配置部署
    [程序员短壁纸]2015年05月
    [注]什么是用户?估计90%人不知道
    [注]排行榜相关知识
    [注]微信公众号的运营推广总结方案(持续更新)
    [注]6W运营法则教你盘活社区内容运营
    [注]一条牛B的游戏推送要具备哪些条件?
    [微信营销企划之路]001.环境搭建(XAMPP+WeiPHP)
    [Python基础]005.语法(4)
    Java多线程设计模式
  • 原文地址:https://www.cnblogs.com/wandia/p/14084097.html
Copyright © 2011-2022 走看看