当前位置: 首页 > wzjs >正文

哈尔滨网站建立公司免费网站整站模板源码

哈尔滨网站建立公司,免费网站整站模板源码,wordpress dewplayer,做网站 怎么提升浏览量✨ 从普通 ItemsControl 到支持筛选的 ItemsControl:深入掌握 CollectionViewSource 用法 在日常 WPF 开发中,我们经常需要对数据进行筛选、排序、分组等操作,而原生的 ItemsControl 并不直接支持这些功能。本文将介绍如何通过 CollectionVi…

✨ 从普通 ItemsControl 到支持筛选的 ItemsControl:深入掌握 CollectionViewSource 用法

在日常 WPF 开发中,我们经常需要对数据进行筛选、排序、分组等操作,而原生的 ItemsControl 并不直接支持这些功能。本文将介绍如何通过 CollectionViewSource 给一个普通的 ItemsControl 加上 动态筛选功能,并指出其中的一些关键注意点


📦 一、初始结构:普通 ItemsControl 显示列表

我们从一个最简单的 ItemsControl 开始:

<ItemsControl ItemsSource="{Binding MBConfigList}"><ItemsControl.ItemTemplate><DataTemplate><TextBlock Text="{Binding FileName}" /></DataTemplate></ItemsControl.ItemTemplate>
</ItemsControl>

这个控件可以显示绑定的 MBConfigList 数据,但没有任何过滤能力。


🛠️ 二、目标:支持按光源类型筛选

我们希望最终能够让用户勾选光源类型,动态筛选出指定类型的数据。例如:

  • 支持“全选”
  • 多个 CheckBox 动态刷新列表
  • 用户操作后立即生效

🧰 三、改造步骤


1️⃣ 引入 CollectionViewSource

我们在 ViewModel 中定义一个 CollectionViewSource 并设置过滤事件:

private CollectionViewSource _viewSource;public ICollectionView FilteredMBConfigList
{get => _viewSource?.View;private set => SetProperty(ref _filteredView, value); // 实现 INotifyPropertyChanged
}public void InitializeFilteredView()
{_viewSource = new CollectionViewSource{Source = GlobalData.Instance.saveInfo.MBConfigList};_viewSource.Filter += ApplyFilter;FilteredMBConfigList = _viewSource.View;
}

FilteredMBConfigList 必须是支持通知的不然界面是不会变化的。


2️⃣ 编写筛选逻辑 ApplyFilter

private void ApplyFilter(object sender, FilterEventArgs e)
{if (e.Item is MBConfigInfo item){var selectedTypes = LightSourceItems.Where(x => x.IsChecked).Select(x => x.Name).ToHashSet();//ToHashSet()是为了更快的查询// 显示所有或匹配项e.Accepted = selectedTypes.Count == 0 || selectedTypes.Contains(item.LightSourceType);}
}

private CollectionViewSource _viewSource; 不能申明成局部变量,不然ApplyFilter只能生效一次。

e.Accepted == true 的选项才会被显示出来。


3️⃣ UI 绑定到新集合

<ItemsControl ItemsSource="{Binding FilteredMBConfigList}"><ItemsControl.ItemTemplate><DataTemplate><TextBlock Text="{Binding FileName}" /></DataTemplate></ItemsControl.ItemTemplate>
</ItemsControl>

这样,控件就用上了支持筛选的视图。


🚨 四、关键注意事项


⚠️ 1. CollectionViewSource 必须缓存

不能每次 get 都创建新的 CollectionViewSource,否则不会触发 .Refresh()

// 错误写法(每次都 new):
public ICollectionView Filtered => new CollectionViewSource { Source = xxx }.View;// 正确:只创建一次

⚠️ 2. 调用 View.Refresh() 以应用筛选

数据变化时,你必须手动调用:

FilteredMBConfigList.Refresh();

建议绑定项(如 CheckBox)中 PropertyChanged 事件或命令中执行刷新。

FilteredMBConfigList.Refresh();调用后会重新触发ApplyFilter 以到达筛选的目的。


⚠️ 3. 筛选逻辑不要复杂耗时

FilterEventArgs 的处理函数会在每次刷新时对 所有项 执行。避免长计算!


⚠️ 4. UI 绑定的是 View,不是 CollectionViewSource 本身

绑定语法是:

ItemsSource="{Binding FilteredMBConfigList}"

不是 _viewSource,而是其 .View


✅ 五、示例:支持多选筛选项结构

使用一个简单的模型:

public class LightSourceFilterItem : INotifyPropertyChanged
{public string Name { get; }public bool IsChecked { get; set; } // 实现通知
}

ViewModel:

public ObservableCollection<LightSourceFilterItem> LightSourceItems { get; set; }LightSourceItems = new ObservableCollection<LightSourceFilterItem>(new[] { "上光源", "下光源", "侧光源" }.Select(name =>{var item = new LightSourceFilterItem(name) { IsChecked = true };item.PropertyChanged += (_, __) => FilteredMBConfigList?.Refresh();return item;}));

XAML:

<ItemsControl ItemsSource="{Binding LightSourceItems}"><ItemsControl.ItemTemplate><DataTemplate><CheckBox Content="{Binding Name}" IsChecked="{Binding IsChecked, Mode=TwoWay}" /></DataTemplate></ItemsControl.ItemTemplate>
</ItemsControl>

🏁 六、总结

优点 ✅注意点 ⚠️
支持筛选、排序、分组.Refresh() 要手动调用
ItemsControl, ListBox, DataGrid 搭配无缝Filter 逻辑要快
不改变原始集合不要频繁 new CollectionViewSource

使用 CollectionViewSource 是 WPF 中实现数据视图分离的经典方式,非常适合构建支持过滤的 UI。


文章转载自:

http://YOU6U7Tr.sskhm.cn
http://Owow6H4N.sskhm.cn
http://1hJSGywg.sskhm.cn
http://2ArV7QuR.sskhm.cn
http://ILb6aCRZ.sskhm.cn
http://uOvmS7jl.sskhm.cn
http://5HOWiA30.sskhm.cn
http://bO1J4bmK.sskhm.cn
http://A6B6SSwu.sskhm.cn
http://oNi9S8Ld.sskhm.cn
http://GeySwQcJ.sskhm.cn
http://dL3zsLhB.sskhm.cn
http://Gd4H6EMY.sskhm.cn
http://e3Oob8s4.sskhm.cn
http://Lx3Drb4Z.sskhm.cn
http://lhunzQjI.sskhm.cn
http://xI9XS2LD.sskhm.cn
http://58nRd8i5.sskhm.cn
http://6igfVeQt.sskhm.cn
http://tiPiURCy.sskhm.cn
http://6n9U2tQa.sskhm.cn
http://g58tdUrp.sskhm.cn
http://4XE6m4e9.sskhm.cn
http://sgBpeCwm.sskhm.cn
http://vC27dY8l.sskhm.cn
http://O2iyqdY2.sskhm.cn
http://tzoTXfjT.sskhm.cn
http://Bh66ZQTR.sskhm.cn
http://xI6pmA3s.sskhm.cn
http://UWQjXP3c.sskhm.cn
http://www.dtcms.com/wzjs/696763.html

相关文章:

  • wordpress插件原理湖北seo网站设计
  • 免费1级做爰片在线网站flask api式网站开发
  • 南京公司网站建设费用怎么做页游网站运营
  • 如何创建广告网站装修材料厂家哪家好
  • 扬州百度seoseo优化销售
  • 外链网站推荐区块链软件开发
  • 怎么做网站网站赚钱网站问卷调查怎么做
  • 大连个人网站建设wordpress mysql备份
  • 百度的网站网址天津高端品牌网站建设
  • 做什么网站开发好网页制作模板的淘宝网站代码
  • 汉高建设公司网站背投广告典型网站
  • 微信订阅号做微网站微信小程序开发工具教程
  • 做网站的那些个人工作室国有平台公司是什么意思
  • 网站制作的内容包含建筑品牌网站
  • 怎么做网站加载动画网页布局有哪些
  • 广汉移动网站建设关键词排名优化怎么做
  • 找个可以直接看的网站seo广告平台
  • 网站开发需求清单万网 成品网站
  • 网站运营培训学校综合管理平台系统
  • 石家庄网站优化500个企点qq大概多少钱
  • 数码产品销售网站建设策划书广告传媒公司的网站应该怎么做
  • 柳州建站公司淄博晨曦网站建设
  • 台州seo网站建设费用做货代在哪些网站能找到客户
  • 做网站界面教育培训班
  • 做棋牌网站违法吗网站框架指的是什么
  • 网站开发怎么自学重庆市城乡建设施工安全管理总站网站
  • 学校网站 cmswordpress编辑媒体永久链接
  • 网络 企业网站wordpress 活动插件
  • 吉林市建设厅网站可以做问答的网站
  • 商城网站备案外链论坛