Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用文本框筛选列表框项目_C#_Wpf - Fatal编程技术网

C# 使用文本框筛选列表框项目

C# 使用文本框筛选列表框项目,c#,wpf,C#,Wpf,我有一个带有一些项目的列表框,还有一个文本框。文本框中的文本应与列表框中的项的起始字符匹配,并应显示过滤结果。如何做到这一点? 谢谢。我喜欢乔希的这个例子 这与另一个链接的方法类似——但这一个非常出色——在使用WPF(以及如何以非常简单的方式完成任务)时,切变优雅很好地记住了这一点。这取决于您的实现。您是否遵循MVVM模式 如果是,则可以根据文本框的设置事件筛选列表框。在setter中,您可以更改列表框的内容 <TextBox Text="{Binding SearchText}" /&

我有一个带有一些
项目的
列表框
,还有一个
文本框
文本框
中的文本应与
列表框
中的
的起始字符匹配,并应显示过滤结果。如何做到这一点?
谢谢。

我喜欢乔希的这个例子


这与另一个链接的方法类似——但这一个非常出色——在使用WPF(以及如何以非常简单的方式完成任务)时,切变优雅很好地记住了这一点。

这取决于您的实现。您是否遵循MVVM模式

如果是,则可以根据文本框的设置事件筛选列表框。在setter中,您可以更改列表框的内容

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

私有字符串_searchText;
公共字符串搜索文本
{
获取{return\u searchText;}
设置
{
_搜索文本=值;
//更改列表框的内容。
}
}

如果您不遵循MVVM,则需要在textbox上添加更改事件处理程序。选择文本框并在属性窗口中选中其事件。其中有TextChanged事件。添加该事件。每当文本框文本发生更改时,这将为您提供一个函数。在这个函数中,您可以实现过滤列表框的逻辑

谢谢大家,但我做了一些更简单的。。 希望对你有帮助

申报清单:

       List<string> list = new List<string>();
在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);
                }
            }                         
        }                

是的,我用TextChanged事件成功了。thx然后将此标记为答案,谢谢,thx举个例子,我用TextChanged event.np制作了它-只是传播
代码之美
:)干杯这应该标记为正确答案。您不需要修改绑定项源的内容,只要您在其中看到的内容就可以了。不要使用布尔值。。。请如果(String.IsNullOrEmpty(t1.Text.Trim())==false)。。。就放一把吧!为了否定。if(!String.IsNullOrEmpty(t1.Text.Trim()){}。与字符串比较相同…if(t1.Text.Trim()==“”)..==String.Emtpy.Yes,旧线程,但我在Google中找到了它,其他人也会这么做:我强烈建议使用ListBox数据源进行此操作。也就是说,制作一个“主列表”在它的每个项目中,这是你的
列表
。现在做第二个,比如说
FilteredList
,并将匹配的项目复制到其中。在编辑器中,将列表框绑定到FilteredList。这比不断重置项目快得多-在我的测试中大约15次。
      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);
                }
            }                         
        }