过滤绑定的列表框c#

Posted

技术标签:

【中文标题】过滤绑定的列表框c#【英文标题】:Filtering a bound listbox c# 【发布时间】:2020-12-01 05:26:17 【问题描述】:

我有一个 XAML 文件,其中包含一个列表框和一个文本框。

列表框充满了数据绑定,如下所示:

<ListBox x:Name="lstboxNotes"
         ItemsSource="Binding Notes"
         SelectedItem="Binding SelectedNote"
        Grid.Row="1"
         ></ListBox>

我拥有的文本框应该在您输入时实时过滤掉结果。 例如,您在列表框中有 5 个注释,如果您搜索“注释 2”,则只会显示该注释,或者名称中包含“注释 2”的任何其他注释。

我知道您可以使用 datatable/dataview 轻松完成此操作,但我不知道如何将我的 Itemssource 设置为数据表。

【问题讨论】:

【参考方案1】:

我只是通过拥有 3 个属性来进行过滤:

    搜索文本 主要收藏 过滤的 IEnumerable

注意,我在示例中使用https://github.com/Fody/PropertyChanged 来实现更简单的INotifyPropertyChanged ([AlsoNotifyFor("FilteredItems")])。您可以通过手动实现INotifyPropertyChanged 来在没有此库的情况下实现相同目的。

首先我将 TextBox 绑定到字符串属性:

[AlsoNotifyFor("FilteredItems")]
 public string ItemsSearch  get; set;  = string.Empty;

并像这样绑定它。

(请注意UpdateSourceTrigger=PropertyChanged,因此每次按下按钮时绑定都会更新。)

Text="Binding InventorySearch, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,ElementName=UserControl_Main"

然后是我存储所有对象的主集合:

(如果您打算在运行时添加和删除对象,您可以使用 ObservableColletion,以更方便地更新 UI)

[AlsoNotifyFor("FilteredItems")]
 public List<string> Items  get; set;  = new List<string>();

最后过滤了 Enumerable:

 public IOrderedEnumerable<string> FilteredItems => 
      Items.Where(x => x.ToUpper().Contains(ItemsSearch.ToUpper()))

【讨论】:

谢谢,我花了一点时间弄清楚如何在我的用例中实现这一点,但最终我们做到了!

以上是关于过滤绑定的列表框c#的主要内容,如果未能解决你的问题,请参考以下文章

用两个列表框asp.net c#绑定gridview

编辑绑定列表框内容后更新 MS Access

将文本框、日期和下拉列表值绑定到参数 angularJS wcfRest

使用knockoutjs在文本框“keydown”之后过滤的显示列表

在 Windows 窗体应用程序 C# 中以编辑模式将值绑定到组合框

用于过滤子表单数据表的未绑定文本框