C# 过滤xaml列表框
嗨,我有一个带有一些客户姓名的列表框,我想根据文本框中输入的文本过滤列表。经过一点研究,我听说我们可以使用CollectionViewSourse和ICollectionView,但没有一个阶段可以让它工作 请你就如何实现这一目标提出建议 非常感谢你的帮助 XAMLC# 过滤xaml列表框,c#,xaml,filter,listbox,collectionviewsource,C#,Xaml,Filter,Listbox,Collectionviewsource,嗨,我有一个带有一些客户姓名的列表框,我想根据文本框中输入的文本过滤列表。经过一点研究,我听说我们可以使用CollectionViewSourse和ICollectionView,但没有一个阶段可以让它工作 请你就如何实现这一目标提出建议 非常感谢你的帮助 XAML 尝试获取集合的默认集合视图。每次txtSearch更改时,都必须更改过滤器 ICollectionView view = CollectionViewSource.GetDefaultView(customerList); vie
尝试获取集合的默认集合视图。每次txtSearch更改时,都必须更改过滤器
ICollectionView view = CollectionViewSource.GetDefaultView(customerList);
view.Filter = obj =>
{
string item = obj as string;
return (item.ToLower().Contains(YourFilter));
};
我建议您阅读有关数据绑定的内容,以及如何使用数据绑定来绑定列表框和文本框,以及如何管理viewmodels中的集合 但要解决你现在的问题 与customerList一样,在全局级别定义IcollectionView,并在主视图中将代码更改为
CollectionViewSource collectionViewSource = new CollectionViewSource();
collectionViewSource.Source = customerList;
collectionView = collectionViewSource.View;
collectionView.Filter = collectionFilter;
lbCustomers.ItemsSource = collectionView;
并添加这两个附加方法
private bool collectionFilter(object obj)
{
if (string.IsNullOrWhiteSpace(txtSearch.Text))
return true;
string name = obj.ToString();
return name.Contains(txtSearch.Text);
}
private void TxtSearch_OnTextChanged(object sender, TextChangedEventArgs e)
{
collectionView.Refresh();
}
将文本框更改为
<TextBox x:Name="txtSearch" TextChanged="TxtSearch_OnTextChanged"/>
这些应该是不言自明的变化,但如果你需要任何帮助,我很乐意解释
filter方法用于定义筛选显示的列表框项目的逻辑Hi感谢您的回复。我总是收到这样的消息“CollectionViewSource不包含getdefaultview的定义”,视图也是如此。FIlter@Rao你在用SilverLight吗?它没有GetDefaultView。检查这个答案,据我所知,我没有使用Silverlight。我确实查看了您发送的链接,并克服了“getdefaultview”错误。但是我仍然需要使用collectionView.Filter,但仍然会出现错误'CollectionViewSource不包含筛选器的定义。我不知道如何克服这个问题我想我确实需要帮助,因为我在“collectionView.Filter=collectionFilter;”中遇到了这个错误错误:IcollectionView不包含“筛选器”的定义。甚至collectionView.Refresh也有错误:IcollectionView不包含“Refresh”的定义
CollectionViewSource collectionViewSource = new CollectionViewSource();
collectionViewSource.Source = customerList;
collectionView = collectionViewSource.View;
collectionView.Filter = collectionFilter;
lbCustomers.ItemsSource = collectionView;
private bool collectionFilter(object obj)
{
if (string.IsNullOrWhiteSpace(txtSearch.Text))
return true;
string name = obj.ToString();
return name.Contains(txtSearch.Text);
}
private void TxtSearch_OnTextChanged(object sender, TextChangedEventArgs e)
{
collectionView.Refresh();
}
<TextBox x:Name="txtSearch" TextChanged="TxtSearch_OnTextChanged"/>