具有自动完成/自动过滤功能的WPF下拉框?

22
我渴望找到一些可靠的(免费、开源或教程/示例)代码,使WPF Combobox在用户输入时能够自动完成/自动过滤。但是到目前为止,我尝试过的所有方法都存在某种问题...

我考虑过的其他事情:

  • 我知道Windows Forms的Combobox控件有AutoCompleteMode属性,并且我可以在WPF中嵌入它,但我无法想象它会与我的WPF数据绑定很好地配合。

  • 也许它太复杂了,我需要简化,可能是通过为ComboBox构建一维(单属性)ObservableCollections...然而,将多个过滤器(一个由另一个控件的值设置,另一个来自用户正在输入的内容)应用于使用相同DataSet的不同视图的多个控件,每次用户键入字符时都需要摧毁和重建列表,这需要大量的处理能力!

所以...我已经束手无策了。有什么建议吗?

2个回答

29

如果您的下拉框已经附加了一些数据源,那么只需执行

1-IsTextSearchEnabled = true.
2-IsEditable = true.

你已经准备就绪了


我本来想能够在多个字段(例如“值”和“描述”)上进行搜索,不区分大小写等等,但这真的很麻烦。最终还是退而求其次,因为它与模板等一起按预期工作。 - ewall
你可以通过创建另一个属性并将字段连接到该属性来在多个字段上进行过滤。然后将搜索字段设置为该属性。由于它包含了所有需要的字段,因此搜索功能正常工作。这有点像一个技巧,但可以完成工作。 - Kelly
1
@ewall 你可以尝试使用 https://www.nuget.org/packages/THEFilteredComboBox/ 这个控件,我们创建了它是因为使用上述属性还不够。 - Peuczynski
这个方法适用于包含160K+计算机名称的List<string>吗?我在Winforms中可以轻松完成,但在WPF中,当我尝试单击下拉菜单时,它会像疯了一样卡住,虽然在我输入时会给出建议。 - Christopher Painter
@ChristopherPainter 对于我来说,使用一个(已排序的)KeyCollection作为ItemsSource,其中包含约7500个字符串条目,这个方法非常有效。打开组合框大约需要5秒钟(无论是否启用搜索),但是即使在集合中的后续条目上进行搜索也几乎是瞬间完成的。请注意,速度可能是因为它是一个已排序的集合,这意味着可以使用二进制搜索。 - Chirimorin

3

现在正在尝试...到目前为止,我对作者的细节关注印象深刻。 - ewall
我当前的项目没有使用这个,但以后会保留,因为它非常可靠。谢谢! - ewall
6
上面的链接已经失效了,但是通过使用web.archive.org我发现这个代码被托管在这里 http://wpfactb.codeplex.com/(你可以在这里阅读文章http://web.archive.org/web/20120421111715/http://blogs.windowsclient.net/dragonz/archive/2010/02/23/autocomplete-textbox-control-for-wpf.aspx)。 - Yaakov Shoham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接