【发布时间】:2014-10-29 09:28:56
【问题描述】:
这是一个两部分。
首先,在 WPF 中,标准 ListBox 控件自动支持对其项的内联搜索。它通过使用项目的 ToString 函数来做到这一点,这意味着如果您将焦点放在列表框内并开始输入,它将执行最左侧的搜索,突出显示 ToString 与您输入的内容匹配的任何项目。短时间内的后续按键会添加到搜索字符串中(即输入“A”后跟“S”将左搜索“AS”,而输入“A”然后暂停,然后输入“S”将改为左搜索搜索“S”。
问题是这种机制似乎完全依赖于 ToString 返回的值,在某些情况下我们不能依赖它。我们可以使用其他东西来代替 ToString 吗?
第二部分是行为似乎只出现在 ListBox 中,但没有其他 ItemsControl 对象(或像 TreeView 这样的分层对象。)无需从头开始重写该功能,有没有简单的方法将其添加到 ItemsControl?
【问题讨论】:
-
我会说不。
ListBoxes 通常在其中包含文本,因此功能是合乎逻辑的,但ItemsControls 通常意味着其中包含对象,因此ItemsControl中的默认搜索功能不太合乎逻辑。你只需要对你的数据做一些基本的过滤......它应该需要10多行代码左右,所以并不难。 -
我的问题的第一部分怎么样......这将有助于解决第二部分。而且您的响应完全忽略了经常与 ListBox 一起使用的数据模板。即使使用 DisplayMember 也会隐式创建一个与 ToString 呈现不同步的数据模板,该功能可能毫无用处,更不用说让用户感到困惑,因为他们的选择(而不是过滤)行为很奇怪,他们不知道为什么。
标签: c# wpf search listbox itemscontrol