首页>资讯>正文
天天头条:基于WPF实现简单的下拉筛选控件
2023-04-08 06:09:53    来源:脚本之家

WPF 简单实现下拉筛选控件

框架使用.NET40


(相关资料图)

Visual Studio 2022;

使用ICollectionView[2]实现筛选功能,还支持其他如下:

使集合具有当前记录管理自定义排序筛选和分组功能

实现代码

1)CheckedSearch.cs代码如下:

SearchText用来记录输入的筛选内容Text用来记录展示的所选内容^拼接ItemsSource数据源ContainsFilter筛选数据,如果从数据源中找到则返回True
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using WpfCustomControlLibrary1.Datas;

namespace WpfCustomControlLibrary1
{
    public class CheckedSearch : Control
    {
        private ICollectionView _filteredCollection;
        public ICollectionView FilteredCollection { get { return _filteredCollection; } }

        private string _searchText = string.Empty;
        public string SearchText
        {
            get { return _searchText; }
            set
            {
                if (_searchText != value)
                {
                    _searchText = value;
                    _filteredCollection.Refresh();
                }
            }
        }

        public string Text
        {
            get { return (string)GetValue(TextProperty); }
            set { SetValue(TextProperty, value); }
        }

        public static readonly DependencyProperty TextProperty =
            DependencyProperty.Register("Text", typeof(string), typeof(CheckedSearch), new PropertyMetadata(string.Empty));


        public ObservableCollection ItemsSource
        {
            get { return (ObservableCollection)GetValue(ItemsSourceProperty); }
            set { SetValue(ItemsSourceProperty, value); }
        }

        public static readonly DependencyProperty ItemsSourceProperty =
            DependencyProperty.Register("ItemsSource", typeof(ObservableCollection), typeof(CheckedSearch), new PropertyMetadata(null, OnItemsSourceChanged));

        private static void OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var choseSearch = (CheckedSearch)d;
            if (choseSearch == null) return;
            if (choseSearch._filteredCollection == null && choseSearch.ItemsSource.Count > 0)
            {
                foreach (var item in choseSearch.ItemsSource)
                {
                    item.PropertyChanged -= choseSearch.Item_PropertyChanged;
                    item.PropertyChanged += choseSearch.Item_PropertyChanged;
                }
                choseSearch._filteredCollection = CollectionViewSource.GetDefaultView(choseSearch.ItemsSource);
                choseSearch._filteredCollection.Filter = choseSearch.ContainsFilter;
            }
        }
        string GetItems()
        {
            var list = ItemsSource.Where(x=>x.IsChecked).Select(x=>x.Name).ToList();
            var visibleItems = string.Join("^",list);
            return visibleItems;
        }
        static CheckedSearch()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(CheckedSearch), new FrameworkPropertyMetadata(typeof(CheckedSearch)));
        }

        private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if (e.PropertyName == "IsChecked")
                Text = GetItems();
            
        }

        private bool ContainsFilter(object item)
        {
            var model = item as CheckedSearchItem;
            if (model == null)
                return false;
            if (string.IsNullOrEmpty(SearchText))
                return true;
            if (model.Name.ToUpperInvariant().Contains(SearchText.ToUpperInvariant()))
                return true;
            return false;
        }
    }
}

2)CheckedSearchItem.cs代码如下:

IsChecked记录是否选中Name展示的名称
using System.ComponentModel;

namespace WpfCustomControlLibrary1.Datas
{
    public class CheckedSearchItem
    {
        public string Name { get; set; }

        private bool _isChecked;
        public bool IsChecked
        {
            get { return _isChecked; }
            set
            {
                _isChecked = value;
                OnPropertyChanged("IsChecked");
            }
        }
        
        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }

    }
}

3)CheckedSearch.xaml代码如下:


        
        
        
        
        
        
            
                
                    
                        
                            
                                
                                
                            
                            
                            
                                
                                
                            

                            
                                
                                    
                                        
                                        
                                            
                                                
                                                    
                                                
                                            
                                        
                                    
                                
                                
                            
                        
                    
                
            
        
    

4)CheckedSearchExample.xaml示例代码如下:


   
        
            
                
            
        
    
  
    
        
    

5)CheckedSearchExample.xaml数据源示例代码如下:

using System.Collections.ObjectModel;
using System.Windows;
using WpfCustomControlLibrary1.Datas;

namespace WpfApp1
{
    public partial class MainWindow
    {
        public ObservableCollection ItemsSource
        {
            get { return (ObservableCollection)GetValue(ItemsSourceProperty); }
            set { SetValue(ItemsSourceProperty, value); }
        }

        public static readonly DependencyProperty ItemsSourceProperty =
            DependencyProperty.Register("ItemsSource", typeof(ObservableCollection), typeof(MainWindow), new PropertyMetadata(null));


        public MainWindow()
        {
            InitializeComponent();
            Loaded += MainWindow_Loaded;
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {

            ItemsSource = new ObservableCollection();
            var items = new ObservableCollection();
            items.Add(new CheckedSearchItem { Name = "Winform" });
            items.Add(new CheckedSearchItem { Name = "WPF" });
            items.Add(new CheckedSearchItem { Name = "WinUI 3" });
            items.Add(new CheckedSearchItem { Name = "MAUI" });
            items.Add(new CheckedSearchItem { Name = "Avalonia UI" });
            ItemsSource = items;
        }
    }
}

到此这篇关于基于WPF实现简单的下拉筛选控件的文章就介绍到这了,更多相关WPF下拉筛选控件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

关键词:

天天头条:基于WPF实现简单的下拉筛选控件

这篇文章主要为大家详细介绍了如何基于WPF实现简单的下拉筛选控件,文中的示例代码讲解详细,对我们学习或工作有一定帮助,感兴趣的小伙伴可以2023-04-08

股票行情快报:锐明技术(002970)4月7日主力资金净买入805.30万元

截至2023年4月7日收盘,锐明技术(002970)报收于25 78元,上涨3 33%,换手率3 34%,成交量3 57万手,成交额9143 57万元。2023-04-08

美国军工巨头雷神公司副董事坠机身亡,妻子一同遇难 环球观天下

据《每日邮报》4月7日报道,当地时间4月6日,一架小型飞机在美国佛州海岸附近坠毁,机上4人全部遇难。美国警方随后证实,遇2023-04-07

热文:克己复礼为仁的意思_克己复礼的意思

1、克己复礼这是孔子学说的一个重要概念,出自《论语·颜渊》一章:“颜渊问仁。2、子曰:‘克己复礼为仁。3、一日克己复礼2023-04-07

东风汽车(600006.SH)3月份新能源汽车销量1384辆 同比下降33%-焦点资讯

智通财经APP讯,东风汽车(600006)(600006 SH)公告,2023年3月份,该公司汽车合计销量16016辆,同比增长6 47%;其中新能源汽车销量12023-04-07

曝《极速骑行5》已准备好发售 有dlc和6个免费奖励包 环球新资讯

还是那位知名爆料人billbil-kun,他发推表示,MilestoneS r l 的《极速骑行5》已经在路上了,而且已经准备好进行发售。2023-04-07

2023湖南汇湘轩生物科技股份有限公司4月招聘汇总-世界聚焦

湖南汇湘轩生物科技股份有限公司:招聘岗位1 城市经理:1人(薪酬:5000~8000元 月)岗位要求:1、大专及以上学历,20-35岁之间,1年以上肉制品经销2023-04-07

记仇!太阳大帅宣布,只给詹皇湖人半场赢球机会,赢不了就别怪他

他可能不会轮休,因为杜兰特回来之后太阳的势头太好了,自从KD和太阳携手之后,他参加过的所有常规赛8战全胜,杜兰特为自己的球队出战的过去222023-04-07

卫龙携手契约锁,推动人事、采购、销售业务电子签 每日信息

卫龙携手契约锁,推动人事、采购、销售业务电子签-知名辣味休闲食品企业——卫龙,携手契约锁就印章管控及电子签章技术展开合作,打造覆盖总部2023-04-07

成都协恒科技有限公司招聘公告

成都协恒科技有限公司装配工2名任职要求:50岁以下,服从安排岗位职责:会钻孔、攻丝,能组装,装车学历要求:其他是否购买社保:是薪资待遇:2023-04-07

黑色泰迪优缺点(泰迪优缺点) 环球速看料

1、泰迪的优点:不掉毛、体味小虽然泰迪狗狗的毛发看上去好像很多很浓密,但是泰迪狗狗是单层毛哦,养过的都知道,泰迪狗狗是属于不掉毛、体味2023-04-07

【环球时快讯】南京人送媒人什么

南京人送媒人这些,我是南方人,经常会遇到南京送的,南京人和京的特产,感觉比较稳合适。因为我是南京的特产,你可以送人参,我2023-04-07

【热闻】加拿大将向日本部署一架CP-140“极光”反潜巡逻机,“支援安理会制裁朝鲜”

【文 观察者网熊超然】据路透社当地时间4月6日报道,加拿大政府当天表示,将向日本部署一架加拿大皇家空军CP-140“极2023-04-07

超466万人!2号线快扛不住了,武汉这7条地铁正在路上……

武汉越来越多的地铁即将开通,不但方便了周边楼盘的业主们,地铁盘也多了一份抗跌保值。2023-04-07

柏乡县住建局电话地址

柏乡县住建局电话地址柏乡县住建局联系方式办公地址:河北省邢台市柏乡县槐东大街227号联系电话(传真):0319—7713303办公时间:9月1日至5月31日上2023-04-07

英语入门词汇记忆_关于英语入门词汇记忆的简介-天天消息

1、《英语入门词汇记忆》是一款Android平台的应用,运行环境为Android。本文关于英语入门词汇记忆的简介就讲2023-04-07

焦点热讯:保护水资源作文500字_保护水资源作文

1、水滋养万物,与人们的生活息息相关。水是甜的,但有时也是苦的;水是珍贵的,但有时也会泛滥;水是清澈的,但在某些地方,它变得浑浊;所有2023-04-07

什么叫做洋房_花园洋房是什么意思_天天通讯

1、花园洋房源于上海,自19世纪中期起,为上海、福建和广东一带上流阶层所专属,是西洋文明和生活方式与中国文化交织的产物。2023-04-07

【天天热闻】农村又出现“新四害”,老农直言比旧四害还厉害,每个农村都有

导读:“新四害”在农村盛行,农民感慨比旧四害还厉害,你们村有哪些?农村生活变好了,以前的农村环境不好,可能与周围环境有关,为了改善农民2023-04-07

龙骑最后一集插曲_龙骑士片尾曲

1、是不是keepholdingon爱薇儿唱的keepholdingon。本文到此分享完毕,希望对大家有所帮助。2023-04-07

Redmi Note 12S曝光:2200元 原生MIUI 14

近日Redmi在欧洲推出RedmiNote12S新品,售价289欧元(约合人民币2200元)。RedmiNote12S采用6 43英寸AMOLED屏,刷新率是90Hz,分辨率是FHD+,2023-04-06

海南水电集团启动“清廉海控建设单元培育试点”创建 30名党员干部签订“清廉”承诺书 天天速看料

原标题:海南水电集团启动“清廉海控建设单元培育试点”创建30名党员干部签订“清廉”承诺书新海南客户端、南海网、南国都市2023-04-06

今天最新消息 广西生物多样性丰富度居全国第三

中新网南宁9月2日电(韦晓韦顺霞)广西壮族自治区林业局2日介绍,广西加快生态文明建设,野生动植物资源不断恢复和发展,2023-04-06

快消息!郑州上街区青年人才驿站在哪?(附具体地址)

郑州上街区青年人才驿站地址:——2023年5月31日前启用未来时代酒店上街区政府店,地址:上街区济源路与金屏路交汇处东北角泓嘉国际酒店,地址2023-04-06

报告:2023年东盟与中日韩地区经济增长4.6%-每日热门

6日,东盟+中日韩(下称“东盟+3”)宏观经济研究办公室(AMRO)发布了其年度旗舰报告《2023》。AMRO预测,东盟+3今年的增长率为4 6%,2024年为2023-04-06

滚动
资讯