WPF中GridView列使用Equals精准过滤清空后无数据异常问题
WPF GridView 精确匹配过滤实现方案
问题根因
你当前的实现存在三个核心问题:
- 没有对文本框空输入做判断,清空后过滤逻辑要求ID等于空字符串,自然没有匹配的行
- 未处理类型匹配:如果
User类的ID属性是数值类型(int/long等),直接和字符串类型的输入做Equals比较会因为类型不同永远返回false - 存在冗余代码:不需要反复给
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
相关产品推荐
相关产品推荐

