目标:在一个页面上用一个combox能实现能够输入文字后,下拉框的数据动态更新为实时最新你的数据列表缓存
场景: 一个能够获取列表的接口 假定叫作GetDataList, 返回的数据 为一个结构体的列表,假定为:List<Data>; Data中只用显示某个字段,并且我要能返回我选中的data数据,而不是选中的内容设计
难点: combox很难一部到位,即便你输入了东西,他要实时匹配,并且能保证我能从数据源中获取正确的数据接口
技术:string
从网上百度到的最简单的符合此业务的要求,即在combox的keyup中获取combobox的text,而后吧数据 来个查找,更新Itemsource, 这种作法只针对comboxitemw为string的选项,若是comboxitem为datatemplate,则combobox的text不能正确显示。能够做为实现的技术雏形it
实现:变量
根据以上技术大体有两个思路:百度
- 有接口获取到列表->在从新组装一边只把Data中的某个字段组成一个列表,而后当comboboxkeyup出发时,两边都要进行过滤,真正取数据的时候从Data中一过滤的地方取,这样的话须要在声明一个全局变量用来保存每次过滤后的缓存的List<Data>数据。
- 在combox上放一个textbox,当combobox能够编辑的时候,就显示为textbox,而后输入内容的时候实时刷新和过滤comboxbox的ItemSource,当下拉选项改变的时候,textbox就更新为最新的选中的item,这个好处是不用在组装列表利用了Data的列表。
总结:软件
- 由于技术上支支持string为Comboxitem的功能,因此List<Data>到ItemSource作了转化。因此每次输入文字搜索刷新须要缓存记录已通过滤的itemsource,和过滤后的元数据
- 根据技术的缺点,针对comboxitem为datatemplate,则combobox的text不能正确显示时,对text进行模拟和绑定。第二种能够进一步封装,完善为控件。更符合低聚合的软件设计原则。