Rub*_*ben 3 c# wpf search listbox
我有一个列表视图,与可观察的对象集合绑定。这里的对象是“问题”。我想实现一种搜索引擎。在文本框什么的。但我有 3 列。1 个描述、1 个简称和 1 个问题类型。这是我的列表视图的代码:
<ListView IsTextSearchEnabled="True" TextSearch.TextPath="Description" ScrollViewer.CanContentScroll="True" SelectedItem="{Binding Path=SelectedQuestionDragList, UpdateSourceTrigger=PropertyChanged,Mode=OneWayToSource}" dd:DragDrop.IsDragSource="True"
dd:DragDrop.IsDropTarget="False" Margin="0,34,393,333" Background="#CDC5CBC5" ScrollViewer.VerticalScrollBarVisibility="Visible"
dd:DragDrop.DropHandler="{Binding}" Name="listbox1" Height="155" ItemsSource="{Binding AvailableQuestions}" SelectionChanged="listbox1_SelectionChanged">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Header="Verkorte naam" Width="Auto" DisplayMemberBinding="{Binding Path=ShortName}" />
<GridViewColumn Header="Omschrijving" Width="Auto" DisplayMemberBinding="{Binding Path=Description}" />
<GridViewColumn Header="Type" Width="Auto" DisplayMemberBinding="{Binding Path=Type}" />
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
Run Code Online (Sandbox Code Playgroud)
我已经尝试过很多事情了。但我只想保留一件简单的事情:一个文本框,如果您填写一些字母,程序必须过滤该字母组合所在的位置。有人知道简单的解决方案或示例吗?
谢谢!
1)创建一个CollectionViewSource:
private readonly CollectionViewSource viewSource = new CollectionViewSource();
Run Code Online (Sandbox Code Playgroud)
2) 将您的列表设置为来源:
viewSource.Source = list;
Run Code Online (Sandbox Code Playgroud)
3) 在 ListView 上设置视图源。
4) 完成此操作后,您可以使用 Filter 属性:
viewSource.Filter = FilterResults;
private bool FilterResults(object obj)
{
//match items here with your TextBox value.. obj is an item from the list
}
Run Code Online (Sandbox Code Playgroud)
5) 最后将 viewSource 的刷新方法放在过滤器 TextBox 的 TextChanged 上:
void TextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
{
viewSource.Refresh();
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!