前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# WPF控件ComboBoxEdit数据绑定及模糊匹配

C# WPF控件ComboBoxEdit数据绑定及模糊匹配

作者头像
zls365
发布2021-12-06 16:10:04
1.7K0
发布2021-12-06 16:10:04
举报
文章被收录于专栏:CSharp编程大全CSharp编程大全

引言部分,总领全篇文章的中心内容。

群友提问:

C#纯小白票友,求一个WPF的combobox自动完成。就是在文本框输入字符(包括中文),下拉框的自动过滤出符合条件的项目列表?

01

实现思路

首先combobox默认是不允许编辑的,需要打开编辑功能那个需要

代码语言:javascript
复制
IsEditable="True"

我这里以dev的控件ComboBoxEdit进行示范

step1:打开vs,创建一哥应用程序,我这里命名为ControlTest;

step2:定义数据模型,我这里定义为一个枚举量(如果是类的话会更容易点)

代码语言:javascript
复制
public enum HumanSkinColors
{
        //Yellow = 0,
        //White =1,
        //Black = 2
        黄色 = 0,
        白色 = 1,
        黑色 = 2
    }

群友特意提到中文,那枚举量就给个中文吧

step3: 定义枚举集合并实例化

代码语言:javascript
复制
  public ObservableCollection<HumanSkinColors> HumanSkinList { get; set; } = new ObservableCollection<HumanSkinColors>();

step4:编写方法,将枚举量添加到集合中

代码语言:javascript
复制
  private void BindingEnumData()
        {
            foreach (HumanSkinColors HumanSkinColor in Enum.GetValues(typeof(HumanSkinColors)))
            {
                HumanSkinList.Add(HumanSkinColor);
            }
        }

step5:绑定数据源到控件

代码语言:javascript
复制
ComboBoxCtr.ItemsSource = HumanSkinList;

step6:在KeyUp事件中进行输入匹配,匹配不到就重新绑定全部枚举量

代码语言:javascript
复制
private void ComboBoxCtr_KeyUp(object sender, KeyEventArgs e)
        {        
            string str = ComboBoxCtr.Text.ToString();
            HumanSkinList.Clear();//先清空集合,再重新绑定数据
            if (string.IsNullOrEmpty(str))
            {
                BindingEnumData();
                return;
            }
            foreach (HumanSkinColors HumanSkinColor in Enum.GetValues(typeof(HumanSkinColors)))
            {
                var enumStr = HumanSkinColor.ToString();
                if(enumStr.Contains(str))
                HumanSkinList.Add(HumanSkinColor);
            }

            if (HumanSkinList.Count > 0)
            {
                ComboBoxCtr.ItemsSource = HumanSkinList;
            }
            else
            {
                BindingEnumData();//没有匹配到就绑定所有数据
            }
        }

完整代码

代码语言:javascript
复制
using System;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Input;

namespace ControlTest
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        public ObservableCollection<HumanSkinColors> HumanSkinList { get; set; } = new ObservableCollection<HumanSkinColors>();
        private void Grid_Loaded(object sender, RoutedEventArgs e)
        {
            BindingEnumData();
            ComboBoxCtr.ItemsSource = HumanSkinList;
        }

        private void BindingEnumData()
        {
            foreach (HumanSkinColors HumanSkinColor in Enum.GetValues(typeof(HumanSkinColors)))
            {
                HumanSkinList.Add(HumanSkinColor);
            }
        }

        private void ComboBoxCtr_KeyUp(object sender, KeyEventArgs e)
        {        
            string str = ComboBoxCtr.Text.ToString();
            HumanSkinList.Clear();//先清空集合,再重新绑定数据
            if (string.IsNullOrEmpty(str))
            {
                BindingEnumData();
                return;
            }
            foreach (HumanSkinColors HumanSkinColor in Enum.GetValues(typeof(HumanSkinColors)))
            {
                var enumStr = HumanSkinColor.ToString();
                if(enumStr.Contains(str))
                HumanSkinList.Add(HumanSkinColor);
            }

            if (HumanSkinList.Count > 0)
            {
                ComboBoxCtr.ItemsSource = HumanSkinList;
            }
            else
            {
                BindingEnumData();//没有匹配到就绑定所有数据
            }
        }
    }

    public enum HumanSkinColors
    {
        //Yellow = 0,
        //White =1,
        //Black = 2
        黄色 = 0,
        白色 = 1,
        黑色 = 2
    }
}

02

效果演示

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CSharp编程大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档