如何使用Textbox(localdatabase)在列表框中查找项目

时间:2014-05-01 15:43:46

标签: c# wpf windows-phone-8 textbox listbox

我有一个字典应用程序,我将单词数据库连接到我的应用程序,现在我想创建一个简单的搜索框(使用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?
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

来自 MSDN

  

CollectionViewSource是CollectionView类的代理,或者是从CollectionView派生的类。 CollectionViewSource使XAML代码能够设置常用的CollectionView属性,并将这些设置传递给基础视图。 CollectionViewSource有一个View属性,用于保存实际视图和一个包含源集合的Source属性。   您可以将集合视图视为绑定源集合顶部的图层,允许您基于排序,过滤器和组查询来导航和显示集合,而无需操纵底层源集合本身。如果源集合实现了INotifyCollectionChanged接口,则CollectionChanged事件引发的更改将传播到视图。   由于视图不会更改基础源集合,因此每个源集合可以具有与之关联的多个视图。例如,您可能有一组Task对象。通过使用视图,您可以以不同的方式显示相同的数据。例如,在页面的左侧,您可能希望显示按优先级排序的任务,而在右侧则按区域分组。

您想使用CollectionViewSource来支持Filtering(查找ListBox中的项目。lvDictionaryListBox

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