感谢您阅读我的问题。
情况:
我有一个ObservableCollection<CheckableListItem<T>> CheckableItems
该类CheckableListItem<T>
有 2 个元素:bool IsChecked
和T Item
.
该类充当包装类,为每个项目添加一个复选框。在这个项目中,传递的 Item 有一个名为 Name 的字符串元素。
它在 XAML 代码中的显示方式:
<ListBox ItemsSource="{Binding CheckableItems}">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" Content="{Binding Path=Item.Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这给了我一个列表框,每个条目都包含一个复选框,复选框的内容是 Item.Name 字符串。
问题:
我在 XAML 中添加了一个文本框,<TextBox></TextBox>
现在我希望列表框仅显示可观察集合中与 TextBox 中的文本匹配的对象。
我认为它可以如何完成:
创建某种视图以绑定到列表框并仅使用与搜索条件匹配的对象更新视图。如果没有在搜索框中输入文本,则必须显示所有对象。例如,如果仅输入字母 E,则仅应显示 Item.Name 属性中包含字母 E 的对象。
我认为最好将文本绑定到我的数据上下文中的字符串变量,并在每次字符串更改时触发一个事件,如下所示:
string SearchString
<TextBox Text="{Binding Path=SearchString, UpdateSourceTrigger=PropertyChanged}" TextChanged="TextBox_TextChanged" />
功能:
private void TextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
{
// Called each time the text changes, perform search here?
}
我只是缺乏关于如何创建这个或如何谷歌搜索正确术语的 WPF 语法知识。
编辑:
ICollectionView checkableItemsView
我现在有一个ObservableCollection<CheckableListItem<T>> CheckableItems
但是如何在 Item.Name 属性上过滤它?
绑定有效,只是我需要帮助的过滤:
<ListBox Grid.Column="1" ItemsSource="{Binding CheckableItemView}">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" Content="{Binding Path=Item.Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
欢迎任何意见。提前致谢。