各种简单实现WPF搜索列表功能方法介绍
创始人
2024-06-18 04:40:25
0

WPF开发工具的正确应用,能够方便的实现一些以前难以实现的图形界面处理方法。在这里我们就先来了解一下有关WPF搜索列表的实现方法。#t#

现在很多程序都提供了搜索功能。比如MSN的Search Contract,VS和Blend里的Property Search。一般是从一个比较大的,用户不太方便查找的列表中按关键字搜索符合条件的项目。

 

下面就来介绍一下WPF搜索列表的实现。对WPF的类库功能不太熟悉的人可能会想到下面几个解决方案。

1. 根据关键字,对List绑定到的数据源进行修改,把不符合关键字的数据项暂时移出列表。这个就不评价了,入门选手的方案。性能和代码量都能让你瞠目结舌。

2. 上面的移出列表不太好?那就不移走了,把不想看到的Item的Visibility设置成Collapsed不就行了?这是个学院派的方案,遇到一个问题解决一个,而且看上去又是那个的合情理。但是,这个要如何实现呢?不要指望直接去设置Item的Visibility,因为控件上的顺序和数据上的顺序不一定相同。那你就要把Visibility绑定吧。那就要到数据上加个IsMatched属性吧。好了,现在每个Item都多了一个属性和一个绑定。

3. 使用Converter过滤,ConverterParameter作为关键字。多完美啊,多么具有新创意识啊。这个是东方不败式的方案。微软也不是吃干饭的,如果这个Convert真是万金油似的,它就不叫Converter了。如果没有问题也就罢了,可这个方案的确是有问题的。问题如下。

a. Converter的返回值是一个新的List,而不是你本来打算绑定到的那个List了。也就是说ListBox的ItemsSource将绑定到一个在Converter中生成的List中。如果哪天你想得到这个List,好么,去Converter里找吧。它和Data Model根本不在一层。这时你有两个选择,要么破坏软件的层次结构,要么用其它方案重写这个功能。

b. 性能问题,笔者所在的项目就在用这个方法。当项目数超过3000时,性能就已经让人无法忍受了。这时其实用数据绑定的角度,你没得解决方案,无论开启数据绑定的异步功能,还是自己用BackgroundWorker异步,都不能达到想要的效果。

当然,如果你的项目,使用Converter完全可以满足你的要求,而且你也已经把Converter用得如火纯青,那就用吧,一点问题也没有。笔者所在项目现在就在用这个方法,因为“它可以工作,那就别去动它。”

好了,现在就来介绍目前笔者所能找到的最佳方案——使用CollectionViewSource的Filter事件,在事件处理函数中你会得到要处理的一个Item,然后你来决定这个Item是不是要显示在界面上。这个方案是使用微软内置的功能实现的,也就是说微软第一次发布WPF的时候,就已经预见到了类似的需求并提供了支持,而且在他的官方示例中也演示了一翻。所心两年前就已经有人解释过个方案(有时要翻墙)就不足为奇了。

笔者写了一个示例程序,即使用6000项字符串数据进行测试,速度还是很快的。

工作时常常会遇到这样的情况,要实现诸如WPF搜索列表这样的功能时,有时一下子就能想到很多个方案出来。然后就直接着手开始写代码,写着写着才发现吃力不讨好。其实这不是努力工作,而是犯懒的表现。因为评估多个解决方案从而找出最佳方案,或是研究一个功能的Best Practice是更需要脑力的。用第一感觉写代码,其实只是一种纯粹的体力劳动,而且不会有什么提高。“

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...