如何在不使用MVVM模式下通过CollectionView实现GridView多条件筛选?
多条件GridView筛选实现方案
核心思路
你只需要在ListCollectionView的Filter委托里,把所有控件的筛选条件用逻辑与(&&)拼接起来即可,同时增加空白判断,对应控件未输入内容时不限制该字段的筛选条件。
具体实现步骤
- 第一步:给所有需要参与筛选的控件(TextBox、ComboBox)的文本变更/选择变更事件绑定同一个刷新筛选的方法
- 第二步:在筛选委托中依次判断每个控件的输入值,拼接所有生效的条件
- 第三步:每次条件变更时调用
view.Refresh()刷新视图即可,不需要重复给GridView指定ItemsSource
完整示例代码
// 你的数据源,假设是全局的List<User> List<User> MyList = new List<User>(); ListCollectionView view; // 窗口初始化时绑定一次视图即可 private void Window_Loaded(object sender, RoutedEventArgs e) { // 模拟初始化数据源,可替换为你自己的数据源加载逻辑 MyList.Add(new User { Id = 1, Name = "张三", Age = 25, Department = "技术部" }); MyList.Add(new User { Id = 2, Name = "李四", Age = 30, Department = "人事部" }); MyList.Add(new User { Id = 3, Name = "王五", Age = 25, Department = "技术部" }); // 只需要初始化一次ListCollectionView即可 view = (ListCollectionView)CollectionViewSource.GetDefaultView(MyList); GridView.ItemsSource = view; // 给所有筛选控件绑定同一个筛选刷新方法,可按实际控件数量扩展 Name_txt.TextChanged += RefreshFilter; Age_cmb.SelectionChanged += RefreshFilter; Department_cmb.SelectionChanged += RefreshFilter; } // 统一的筛选刷新方法 private void RefreshFilter(object sender, RoutedEventArgs e) { view.Filter = delegate (object item) { User user = item as User; if (user == null) return false; // 1. 姓名筛选:文本框为空时该条件自动满足,不参与过滤 bool nameMatch = string.IsNullOrEmpty(Name_txt.Text) || user.Name.Contains(Name_txt.Text); // 2. 年龄筛选:下拉框未选择时该条件自动满足,不参与过滤 bool ageMatch = Age_cmb.SelectedItem == null || user.Age == (int)Age_cmb.SelectedValue; // 3. 部门筛选:下拉框未选择时该条件自动满足,不参与过滤 bool deptMatch = Department_cmb.SelectedItem == null || user.Department == Department_cmb.SelectedValue.ToString(); // 所有生效条件都满足才会展示对应数据,若需要逻辑或筛选可把&&改为|| return nameMatch && ageMatch && deptMatch; }; // 刷新视图应用最新筛选规则 view.Refresh(); } // 你的User类补全示例,可按实际业务字段扩展 public class User { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public string Department { get; set; } }
注意事项
- 示例中的控件名(Age_cmb、Department_cmb)请替换为你实际项目中对应的控件名称
- 如果需要模糊匹配下拉框选项的内容,可将等于判断修改为
Contains匹配逻辑
内容的提问来源于stack exchange,提问作者abdou93
相关产品推荐
相关产品推荐

