C# ListView多条件过滤异常:两个过滤器仅一个生效
问题原因
你现在的代码里,view.Filter是一个单一的委托属性,你连续给它赋值两次:先赋值UserFilter,接着又赋值UserFilter_box,后者会直接覆盖前者。所以最终只有最后那个过滤器(UserFilter_box)在工作,第一个过滤器的逻辑完全没被执行。
解决方案
把两个过滤条件合并到同一个过滤器方法里,让两个条件同时生效。修改后的代码如下:
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(parkingListe.ItemsSource); view.Filter = CombinedFilter; // 合并条码和箱号的过滤逻辑 private bool CombinedFilter(object item) { ParkingClass parkingItem = item as ParkingClass; if (parkingItem == null) return false; // 条码过滤逻辑:输入为空则不限制,否则检查是否包含目标文本 bool barcodeMatch = string.IsNullOrEmpty(txtFilter.Text) ? true : parkingItem.parking_barcode.IndexOf(txtFilter.Text, StringComparison.OrdinalIgnoreCase) >= 0; // 箱号过滤逻辑:规则同条码过滤 bool boxMatch = string.IsNullOrEmpty(boxFilter.Text) ? true : parkingItem.parking_box.IndexOf(boxFilter.Text, StringComparison.OrdinalIgnoreCase) >= 0; // 两个条件都满足才保留该条目(如果需要满足任意一个条件就改成 ||) return barcodeMatch && boxMatch; }
逻辑说明:
- 先把
item转成ParkingClass,避免空引用报错 - 每个输入框为空时,对应过滤条件自动生效(不对条目做限制)
- 只有同时满足条码和箱号过滤条件的条目,才会显示在ListView中
内容的提问来源于stack exchange,提问作者M.Nasiri
相关产品推荐
相关产品推荐

