我有一个字典应用程序,我将单词数据库连接到我的应用程序,现在我想创建一个简单的搜索框(使用textBox和Button)在我的列表框中搜索单词
我在按钮代码中找到了这个对我有用的,但剩下的呢?
private void searchBTN_Click_1(object sender, RoutedEventArgs e)
{
foreach (Wordst item in mainlist.Items)
{
if (item.listwordsw == txtSearch.Text)
{
//What should I have Here?
}
foreach (Wordst subItem in mainlist.Items)
{
if (subItem.Listwords2== txtSearch.Text)
{
//What should I have Here?
}
}
}
}
答案 0 :(得分:1)
来自 MSDN
CollectionViewSource是CollectionView类的代理,或者是从CollectionView派生的类。 CollectionViewSource使XAML代码能够设置常用的CollectionView属性,并将这些设置传递给基础视图。 CollectionViewSource有一个View属性,用于保存实际视图和一个包含源集合的Source属性。 您可以将集合视图视为绑定源集合顶部的图层,允许您基于排序,过滤器和组查询来导航和显示集合,而无需操纵底层源集合本身。如果源集合实现了INotifyCollectionChanged接口,则CollectionChanged事件引发的更改将传播到视图。 由于视图不会更改基础源集合,因此每个源集合可以具有与之关联的多个视图。例如,您可能有一组Task对象。通过使用视图,您可以以不同的方式显示相同的数据。例如,在页面的左侧,您可能希望显示按优先级排序的任务,而在右侧则按区域分组。
您想使用CollectionViewSource
来支持Filtering
(查找ListBox
中的项目。lvDictionary
是ListBox
public partial class FilteringSample : Window
{
public FilteringSample()
{
InitializeComponent();
List<Word> items = new List<Word>();
items.Add(new User() { Name = "Apple"});
items.Add(new User() { Name = "Orange"});
items.Add(new User() { Name = "Pineapple" });
items.Add(new User() { Name = "Define",});
lvDictionary.ItemsSource = items;
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lvDictionary.ItemsSource);
view.Filter = UserFilter;
}
private bool UserFilter(object item)
{
if(String.IsNullOrEmpty(txtFilter.Text))
return true;
else
return ((item as Word).Name.IndexOf(txtFilter.Text, StringComparison.OrdinalIgnoreCase) >= 0);
}
private void txtFilter_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
{
CollectionViewSource.GetDefaultView(lvDictionary.ItemsSource).Refresh();
}
}