【问题标题】:Autocomplete on multicolumn combobox WPF多列组合框WPF上的自动完成
【发布时间】:2016-01-04 22:47:42
【问题描述】:

美好的一天

我有一个标准的 WPF 组合框,它显示 2 个字段,代码如下:

    <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock DataContext="{Binding}">
                            <TextBlock.Text>
                                <MultiBinding StringFormat="{}{0} {1}">
                                    <Binding Path="Surname" />
                                    <Binding Path="FirstName" />
                                </MultiBinding>
                            </TextBlock.Text>
                        </TextBlock>
                    </DataTemplate>
                </ComboBox.ItemTemplate>

我需要能够“搜索”组合框中的值(IsTextSearchable 和 TextSearch.TextPath 没有区别 [据我所知,与搜索/自动完成功能无关])。照原样,当我在组合框中键入时,什么也没有发生。我设法使下拉菜单保持打开状态,但没有运气根据输入的内容找到匹配项。任何帮助、链接或建议将不胜感激!

【问题讨论】:

  • 您可以执行 Surname + FirstName 的属性,然后在 KeyUp 等事件上过滤 itemssource,这样您的项目将仅返回那些包含在 Surname + FirstName 中键入的字母的项目。也许有更好的方法,但这应该可行。

标签: c# wpf combobox


【解决方案1】:

TextSearch 似乎不适用于 MultiBinding: https://social.msdn.microsoft.com/Forums/vstudio/en-US/de5e6589-13f2-44a4-a92b-16359932baee/textsearchtext-on-combobox-using-itemtemplate?forum=wpf

您可以在您绑定到的项目上构建另一个属性,然后使用它来代替 MultiBinding。这样,您就可以使用内置的 TextSearch 功能而不是自己制作。

【讨论】:

  • 我正在直接从数据表执行绑定。我编辑了 SQL 语句以连接名字和姓氏,并尝试以这种方式实现功能,但没有运气。我完全误解了你,还是你建议我尝试的这种原则?
  • 我刚刚用同一张表(表结构相同)对不同的数据库进行了测试,但它包含不同的数据并且功能有效!第二个表在 surname 或 name 字段中不包含任何重复值。这也许是问题所在?在“生产”数据库中,该表包含相同的姓氏值;例如Smith, John 和 Smith, Paul 是条目。
  • 您是否搜索过“Smith”?据我了解,内置文本搜索仅适用于前缀。因此,在这种情况下,除非是姓氏,否则搜索“John”或“Paul”不会返回任何内容。
猜你喜欢
  • 2015-03-13
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多