使用 wpf 在列表框中搜索

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)

我已经尝试过很多事情了。但我只想保留一件简单的事情:一个文本框,如果您填写一些字母,程序必须过滤该字母组合所在的位置。有人知道简单的解决方案或示例吗?

谢谢!

Arc*_*rus 5

请看一下CollectionViewSource

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)

希望这可以帮助!