让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">

运行结果:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏更流畅、简洁的软件开发方式

【视频】自然框架之分页控件的使用方法(一) PostBack方式的一般分页方式

前言:分页控件的优点 1、 按需所取 —— 需要几条记录就从数据库里提取几条记录,不会多取。 2、 使用简单 —— 设置几个属性就可以实现分页的功能。 3、...

24860
来自专栏Golang语言社区

剖析Go编写的Socket服务器模块解耦及基础模块的设计

Server的解耦—通过Router+Controller实现逻辑分发 在实际的系统项目工程中中,我们在写代码的时候要尽量避免不必要的耦合,否则你以后在更新和维...

37640
来自专栏Golang语言社区

神奇的go语言(高级应用)

其实有了上一篇的基本语法,我们就可以做一些简单的事情,比如说文件服务器。或许大家有点不相信,没关系。下面开始用代码来说明问题,其实整个代码的内容不会超过十行。 ...

38690
来自专栏阿炬.NET

ASP.NET MVC 4 中Jquery上传插件Uploadify简单使用-版本:3.2.1

32950
来自专栏Golang语言社区

剖析Go编写的Socket服务器模块解耦及基础模块的设计

Server的解耦—通过Router+Controller实现逻辑分发 在实际的系统项目工程中中,我们在写代码的时候要尽量避免不必要的耦合,否则你以后在更新和维...

37870
来自专栏更流畅、简洁的软件开发方式

【自然框架】QuickPager asp.net 分页控件的Ajax分页方式。

  上次比较匆忙,Ajax的分页方式仅实现了基本功能,或者说只是验证了我的想法。现在对Ajax分页有做了一些调整,现在可以正式用了。   使用方法还是非常简单,...

26670
来自专栏林德熙的博客

win10 uwp 显示SVG win2d 使用 svg

这些图片在http://www.zcool.com.cn/下载,不知道是不是不能直接用

21710
来自专栏Golang语言社区

剖析Go编写的Socket服务器模块解耦及基础模块的设计

Server的解耦—通过Router+Controller实现逻辑分发 在实际的系统项目工程中中,我们在写代码的时候要尽量避免不必要的耦合,否则你以后在更新和维...

38380
来自专栏更流畅、简洁的软件开发方式

【开源】QuickPager ASP.NET2.0分页控件V2.0.0.3 【增加了使用说明】

最新版本:V2.0.0.7 。http://www.cnblogs.com/jyk/archive/2008/07/28/1255101.html 下载:ht...

245100
来自专栏张善友的专栏

Webix JavaScript UI 库可以帮你构建跨平台的HTML5 和 CSS3 程序

XB 软件公司最近发布了JavaScript UI 库Webix ,其中包含的组件超过45个,用这些组件可以构建跟HTML5 和 CSS3 兼容的程序,这些程序...

21660

扫码关注云+社区

领取腾讯云代金券