You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中GridView列使用Equals精准过滤清空后无数据异常问题

WPF GridView 精确匹配过滤实现方案

问题根因

你当前的实现存在三个核心问题:

  1. 没有对文本框空输入做判断,清空后过滤逻辑要求ID等于空字符串,自然没有匹配的行
  2. 未处理类型匹配:如果User类的ID属性是数值类型(int/long等),直接和字符串类型的输入做Equals比较会因为类型不同永远返回false
  3. 存在冗余代码:不需要反复给GridView.ItemsSource赋值,直接操作集合视图的过滤规则即可

修复后代码

private void ID_TextChanged(object sender, TextChangedEventArgs e)
{
    try
    {
        ListCollectionView view = (ListCollectionView)CollectionViewSource.GetDefaultView(users);
        view.Filter = delegate (object item) 
        { 
            var user = item as User;
            // 文本框为空直接返回所有行
            if (string.IsNullOrWhiteSpace(IDtxt.Text))
                return true;
            // 若ID是int类型,先转换输入再比较,避免类型不匹配
            if(int.TryParse(IDtxt.Text, out int inputId))
            {
                return user.ID == inputId;
            }
            // 如果ID本身是字符串类型,直接用Equals比较,可加StringComparison参数调整匹配规则
            return user.ID.Equals(IDtxt.Text, StringComparison.Ordinal);
        };
        // 刷新视图让过滤规则生效
        view.Refresh();
    }
    catch (Exception es)
    {
        Console.WriteLine("Error!" + es);
    }
}

逻辑说明

  • 输入文本为空时直接返回true,所有行都会展示,符合清空文本框显示全部数据的需求
  • 数值类型ID先做类型转换再比较,避免类型不同导致Equals永远返回false的问题
  • 不需要反复修改ItemsSource,仅需刷新集合视图即可生效,性能更优
  • 字符串类型ID可通过StringComparison参数指定匹配规则,比如忽略大小写等,可根据业务需求调整

内容的提问来源于stack exchange,提问作者abdou31

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:57:03