【问题标题】:Filter WPF combobox to items that contain typed string将 WPF 组合框筛选为包含键入字符串的项目
【发布时间】:2012-10-31 09:48:31
【问题描述】:

我无法弄清楚如何过滤组合框以仅显示包含迄今为止输入的文本的项目。

这是构建组合框绑定到的数据表的函数:

Function users() As DataTable
        Dim ds As New DataSet
        Dim dt As DataTable
        Dim dr As DataRow
        Dim idCoulumn As DataColumn
        Dim nameCoulumn As DataColumn

        dt = New DataTable()
        idCoulumn = New DataColumn("ID", Type.GetType("System.Int32"))
        nameCoulumn = New DataColumn("Name", Type.GetType("System.String"))

        dt.Columns.Add(idCoulumn)
        dt.Columns.Add(nameCoulumn)

        dr = dt.NewRow()
        dr("ID") = 1
        dr("Name") = "Zuse, Konrad"
        dt.Rows.Add(dr)

        dr = dt.NewRow()
        dr("ID") = 2
        dr("Name") = "Torvalds, Linus"
        dt.Rows.Add(dr)

        dr = dt.NewRow()
        dr("ID") = 3
        dr("Name") = "Babbage, Charles"
        dt.Rows.Add(dr)

        ds.Tables.Add(dt)

        Return dt

    End Function

如果我键入“u”,我将如何对其进行编程以仅显示 Linus 和 Zuse 条目?

我尝试过这样的事情,但我真的不明白该怎么做:

Private Sub userKeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles cb_user.KeyUp
    cb_user.IsDropDownOpen = True
    cb_user.Items.Filter = Function(item)
                               Return item.ToString().Contains(cb_user.Text.Trim())
                           End Function
End Sub

【问题讨论】:

    标签: wpf vb.net combobox filter


    【解决方案1】:

    LINQ:

    Dim query = (From dr As DataRow In dt.Rows Where dr("Name").ToString.Contains("Linus")).ToArray()
    

    拉姆达:

    Dim query = dt.Rows.AsEnumerable.Where(Function(dr) dr("Name").ToString.Contains("Linus")).ToArray()
    

    【讨论】:

    • 很抱歉,我不明白我应该把它放在我的代码中的什么地方。
    • textChanged 事件,如果它是一个文本框。清除项目,运行查询,加载组合框。此组合框不需要数据绑定。
    • 另一条路线是使用 CollectionViewSource 并将查询应用到它。至少这适用于实体框架。
    【解决方案2】:

    请试试这个控件https://www.nuget.org/packages/THEFilteredComboBox/我认为你的情况就足够了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-13
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 2014-07-04
      • 2012-04-28
      相关资源
      最近更新 更多