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);
}
}
}