这是一个双人单位。如何在ItemsControl中实现自定义内联搜索?
首先,在WPF中,标准的ListBox控件自动支持对其项目进行内联搜索。它通过使用项目的ToString函数来实现这个功能,这意味着如果你有焦点放在列表框中并开始输入,它将执行最左边的搜索,突出显示任何ToString与你输入的内容相匹配的项目。在短时间内随后的按键添加到搜索字符串中(即,键入'A'后跟'S'将向左搜索'AS',而打印'A'然后暂停,然后键入'S'搜索'S'
问题是这个机制似乎完全依赖于ToString返回的值,在某些情况下我们不能依赖这个值。是否还有别的东西可以用来代替ToString ?
第二部分是行为似乎只出现在ListBox中,但没有其他ItemsControl对象(或像TreeView那样的分层结构)。不必从头开始重新编写该功能,是否有简单的方法将它添加到ItemsControl?
我会说不。 'ListBox's通常在其中包含文本,所以这些功能是合乎逻辑的,但ItemsControl通常意味着它们中有对象,因此'ItemsControl'中的默认搜索功能不那么合乎逻辑。你只需要对数据进行一些基本的过滤......它应该占用10行以上的代码,所以这并不困难。 – Sheridan 2014-09-04 15:16:23
我的问题的第一部分是什么......这将有助于解决第二部分问题。而你的回应完全忽略了与ListBox一起使用的数据模板。即使使用DisplayMember,也会隐含地创建一个与ToString不同步的数据模板,这种功能可能无用,更不用说混淆于获得奇数选择(而不是过滤)行为的用户,他们不知道为什么。 – MarqueIV 2014-09-04 15:21:30