博客
关于我
[WPF 自定义控件]排序、筛选以及高亮
阅读量:435 次
发布时间:2019-03-06

本文共 2112 字,大约阅读时间需要 7 分钟。

如何优化列表以提高查找效率

1. 排序

在WPF中实现数据排序的常用方法是使用 CollectionViewSource。它类似于数据库中的表和视图概念,通过代理实现数据的排序、筛选和分组,而不直接修改原始数据源。以下是使用 CollectionViewSource 实现排序的代码示例:

private readonly CollectionViewSource _viewSource;public HighlightSample(){    InitializeComponent();    _viewSource = new CollectionViewSource    {        Source = Employee.AllExecutives    };    _viewSource.View.Culture = new System.Globalization.CultureInfo("zh-CN");    _viewSource.View.SortDescriptions.Add(new SortDescription(nameof(Employee.FirstName), ListSortDirection.Ascending));    EmployeeElement.ItemsSource = _viewSource.View;}

2. 筛选

CollectionViewSourceView 属性支持过滤功能。以下是实现筛选功能的代码:

_viewSource.View.Filter = (obj) => (obj as Employee).DisplayName.ToLower().Contains(FilterElement.Text);private void OnFilterTextChanged(object sender, TextChangedEventArgs e){    if (_viewSource != null)        _viewSource.View.Refresh();}

3. 高亮显示

为了实现高亮效果,可以使用 TextBlockService 附加属性。以下是实现高亮功能的代码示例:

private static void MarkHighlight(TextBlock target, string highlightText){    var text = target.Text;    target.Inlines.Clear();    if (string.IsNullOrWhiteSpace(text))        return;    if (string.IsNullOrWhiteSpace(highlightText))    {        target.Inlines.Add(new Run { Text = text });        return;    }    while (text.Length > 0)    {        var runText = string.Empty;        var index = text.IndexOf(highlightText, StringComparison.InvariantCultureIgnoreCase);        if (index > 0)        {            runText = text.Substring(0, index);            target.Inlines.Add(new Run { Text = runText, Foreground = _noHighlightBrush });        }        else if (index == 0)        {            runText = text.Substring(0, highlightText.Length);            target.Inlines.Add(new Run { Text = runText });        }        else if (index == -1)        {            runText = text;            target.Inlines.Add(new Run { Text = runText, Foreground = _noHighlightBrush });        }        text = text.Substring(runText.Length);    }}

4. 结语

通过上述方法,我们可以显著提升列表的可用性和效率。虽然高亮功能目前无法直接定义颜色,但可以通过自定义 ToolTipService 来实现更复杂的高亮效果。

5. 参考

6. 源码

转载地址:http://xtyuz.baihongyu.com/

你可能感兴趣的文章
opencv之模糊处理
查看>>
Opencv介绍及opencv3.0在 vs2010上的配置
查看>>
OpenCV使用霍夫变换检测图像中的形状
查看>>
opencv保存图片路径包含中文乱码解决方案
查看>>
OpenCV保证输入图像为三通道
查看>>
OpenCV入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
opencv图像分割2-GMM
查看>>
opencv图像分割3-分水岭方法
查看>>
opencv图像切割1-KMeans方法
查看>>
OpenCV图像处理篇之阈值操作函数
查看>>
opencv图像特征融合-seamlessClone
查看>>
OpenCV图像的深浅拷贝
查看>>
OpenCV在Google Colboratory中不起作用
查看>>
OpenCV学习(13) 细化算法(1)(转)
查看>>
OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
查看>>
OpenCV学堂 | CV开发者必须懂的9种距离度量方法,内含欧氏距离、切比雪夫距离等(建议收藏)
查看>>
OpenCV学堂 | OpenCV中支持的人脸检测方法整理与汇总
查看>>
OpenCV学堂 | OpenCV案例 | 基于轮廓分析对象提取
查看>>
OpenCV学堂 | YOLOv8与YOLO11自定义数据集迁移学习效果对比
查看>>
OpenCV学堂 | YOLOv8官方团队宣布YOLOv11 发布了
查看>>