【问题标题】:How to find items in listbox using Textbox( localdatabase ) [duplicate]如何使用文本框(localdatabase)在列表框中查找项目[重复]
【发布时间】:2014-05-01 15:43:45
【问题描述】:

我有一个字典应用程序,并且我的应用程序连接了单词的数据库,现在我想创建一个简单的搜索框(使用文本框和按钮)在我的列表框中搜索单词。

我在按钮代码中发现这对我很有用,但其余的呢?

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?
            }
        }
    }
}

【问题讨论】:

  • 您能否举例说明列表和搜索框将包含的内容以及您希望结果的外观。

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


【解决方案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();
            }
}

【讨论】:

  • 非常感谢。 :)
猜你喜欢
  • 1970-01-01
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多