使用文本框过滤列表框项目

时间:2013-03-26 01:42:57

标签: c# wpf

我有ListBoxItemsTextBoxTextBox中的文字应与ItemsListBox中{{1}}的起始字符相匹配。应该显示过滤结果。这该怎么做? 感谢。

3 个答案:

答案 0 :(得分:2)

我喜欢Josh的这个例子......

http://joshsmithonwpf.wordpress.com/2007/06/12/searching-for-items-in-a-listbox/#

它与其他链接的方法类似 - 但是这个方法非常棒 - 在使用WPF时要记住剪切优雅(以及如何以非常简单的方式完成工作)。

答案 1 :(得分:1)

这取决于您的实施。您是否关注MVVM模式?

如果是,那么您可以在文本框的set事件中过滤列表框。在设置器中,您可以更改列表框的内容。

<TextBox Text="{Binding SearchText}" />
private string _searchText;
public string SearchText
{
    get { return _searchText; }
    set
    {
        _searchText = value;
        // Change contents of list box.
    }
}

如果您没有关注MVVM,那么您需要在文本框上添加更改事件处理程序。选择TextBox并在属性窗口中检查其事件。其中有TextChanged事件。添加该事件。每当更改文本框文本时,这将为您提供一个功能。在该功能中,您可以实现过滤列表框的逻辑。

答案 2 :(得分:1)

对大家来说,但我做了一些简单的事情...... 希望有所帮助..

声明一个清单:

       List<string> list = new List<string>();

在主窗口中:

      public MainWindow() {
        list.Clear();

        foreach (String str in lb1.Items)
        {
            list.Add(str);
        }
     }

在textchanged事件中:

      public void t1_TextChanged(object sender, TextChangedEventArgs e)
{
        if (String.IsNullOrEmpty(t1.Text.Trim()) == false)
        {
            lb1.Items.Clear();
            foreach (string str in list)
            {
                if (str.StartsWith(t1.Text.Trim()))

                {
                    lb1.Items.Add(str);
                }
            } 
        }

        else if(t1.Text.Trim() == "")
        {
            lb1.Items.Clear();

            foreach (string str in list)
                {
                    lb1.Items.Add(str);
                }
            }                         
        }