使用“搜索”框从“列表”框中搜索项目

时间:2015-11-01 22:01:36

标签: c# wpf xaml listbox search-box

我有一个ListBox,其中包含大量数据。我想使用SearchBox在此列表中搜索项目,以便根据在SearchBox中输入的文本,ListBox中的项目列表应相应地更改。 我在互联网上查了一下,却找不到任何如何做的例子。 非常感谢您的帮助/建议。 这是我的XAML

        <SearchBox 
        HorizontalAlignment="Stretch" 
        VerticalAlignment="Top"
        Height="50" 
        Margin="10,0,10,10"/>
            </StackPanel>
            <ListBox
            x:Name="lbSkills"
            Grid.Row="1"
            Margin="10,0,10,10" SelectionChanged="lbSkills_SelectionChanged">
                <ListBox.ItemContainerStyle>
                    <Style TargetType="ListBoxItem">
                        <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
                    </Style>
                </ListBox.ItemContainerStyle>
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Border BorderThickness="0,0,0,1" BorderBrush="Beige">
                            <Grid Width="auto" HorizontalAlignment="Stretch">
                                <TextBlock VerticalAlignment="Center" FontSize="26" Grid.Column="0" Foreground="Black" Text="{Binding SkillDescription}"/>
                            </Grid>
                        </Border>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

2 个答案:

答案 0 :(得分:0)

您需要一个文本框,一个按钮以及一个列表框或DataGrid。

将文本框连接到viewmodel属性。将按钮连接到viewmodel命令属性。将listbox或datagrid源连接到viewmodel上的observable list属性。执行按钮时运行linq搜索查询并填充可观察列表。

如果您需要特定于代码的解决方案,请发送评论。

更新1:

链接到已实施搜索的示例项目 https://mahowling.wordpress.com/2014/07/31/wpf-search-text-box-for-mvvm/

答案 1 :(得分:0)

您可以通过CollectionView过滤List的绑定集合。 您的实施可以如下: 定义TextChanged处理程序;获取CollectionView的{​​{1}}并定义ListBox's ItemsSource代理人。您可以存储为filter成员变量,这样您就不需要一次又一次地获取CollectionView

CollectionView

因为,文本Changed事件会在每个键击中触发,因此您可以实现延迟搜索。您可以按照this条款来实现该目标。