让Silverlight AutoCompleteBox控件支持多属性筛选
时间:2022-06-09
本文章向大家介绍让Silverlight AutoCompleteBox控件支持多属性筛选,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
首先我们先建立一个实体类并创建它的集合用于绑定控件的ItemSource属性,这个实体类有两个属性,如下:
1: public class AUser
2: {
3: public string Name { set; get; }
4: public string Age { set; get; }
5: }
编写XAML如下:
<sdk:AutoCompleteBox Height="28" Name="autoCompleteBox1" ValueMemberPath="Age" >
<sdk:AutoCompleteBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding Age}"/>
</StackPanel>
</DataTemplate>
</sdk:AutoCompleteBox.ItemTemplate>
</sdk:AutoCompleteBox>
大家都知道, 一般情况下AutoCompleteBox控件只能筛选绑定项中的一个属性,(及ValueMemberPath在本例中只能设置为Name或Age),并且ValueMemberPath属性中的路径既是筛选属性路径又是选定项的结果属性路径。
接下来我们扩展它,使它能支持多属性路径,并能指定输出结果属性路径。我的解决思路是利用附加属性的力量达到目标,代码如下:
1: public static class AutoCompleteBoxHelper
2: {
3: private static void OnIsOtherPathChanged(DependencyObject obj,
DependencyPropertyChangedEventArgs e)
4: {
5: var acb = obj as AutoCompleteBox;
6: if (!string.IsNullOrEmpty(e.NewValue.ToString()))
7: {
8: acb.ItemFilter = (s,item)=>{
9: var objType = item.GetType();
10: string path = GetOtherPaths(acb);
11: var pathes = path.Split(',');
12: bool result = false;
13: foreach (string p in pathes)
14: {
15: var propertyInfo = objType.GetProperty(p);
16: string value = propertyInfo.GetValue(item, null).ToString();
17: result |= value.Contains(s);
18: }
19: return result;
20: };
21: }
22: else
23: acb.ItemFilter = null;
24: }
25:
26: public static string GetOtherPaths(DependencyObject obj)
27: {
28: return (string)obj.GetValue(OtherPathsProperty);
29: }
30:
31: public static void SetOtherPaths(DependencyObject obj, string value)
32: {
33: obj.SetValue(OtherPathsProperty, value);
34: }
35:
36: public static readonly DependencyProperty OtherPathsProperty =
37: DependencyProperty.RegisterAttached("OtherPaths", typeof(string),
38: typeof(AutoCompleteBoxHelper),
39: new PropertyMetadata("", OnIsOtherPathChanged));
40: }
OtherPaths属性就是一个支持多属性路径的属性(如”Name,Age”),并且指定了OtherPaths后ValueMemeberPath的筛选作用就不再工作了,而只保留了选定结果项属性路径的功能。
最后要叫它工作:
<sdk:AutoCompleteBox Height="28" Name="autoCompleteBox1" ValueMemberPath="Age"
loc:AutoCompleteBoxHelper.OtherPaths="Age,Name">
运行结果:
- 视差滚动技术的简介及运用
- 【面试虐菜】—— JAVA面试题(3)
- Carousel 旋转画廊特效的疑难杂症
- 区块链为IBM与Visa等老牌公司注入新的生机
- 【java.lang.UnsupportedClassVersionError】版本不一致出错
- Yeoman 官网教学案例:使用 Yeoman 构建 WebApp
- JSP与JavaBeans
- Log4j官方文档翻译(四、如何在java中输出日志消息)
- 展望未来:使用 PostCSS 和 cssnext 书写 CSS
- Java多线程之Runable与Thread
- 关于 devbridge-autocomplete 插件多选操作的实现方法
- node-sass 安装失败的解决措施
- JavaMelody监控SQL
- 关于jboss的线程问题+java.lang.outofmemoryError
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- java中的reference(三): FinalReference和Finalizer的源码分析
- 【ceph】性能测试工具cosbench(1)
- linux命令tree的使用
- 腾讯云V3签名方法之iOS
- Go语言学习之 panic 和 recover
- Go语言学习之函数
- 【Spark Operator】webhook的分析
- 图解人脸识别算法facenet系列(一)
- Go 语言学习之 struct
- Go 语言学习之map
- 前端|利用手机号登录获取手机验证码
- Linux netstat命令结果分析
- setlistmap部分源码解析
- 使用 Log4j2 + SLF4j 打造日志系统的全方位教程
- 树莓派4的操作系统安装烧录、设置SSH、WIFI、VNC及备份