Поиск элементов из списка с помощью поля поиска

У меня есть 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 ответа

Вы можете отфильтровать связанную коллекцию List через CollectionView, Ваша реализация может быть следующей: определить обработчик TextChanged; Получить CollectionView за ListBox's ItemsSource и определить filter делегировать. Вы можете хранить как CollectionView переменная-член, так что вам не нужно снова и снова получать CollectionView

private void txtSearchFilter_TextChanged(object sender, TextChangedEventArgs e)
        {
            ICollectionView items = CollectionViewSource.GetDefaultView(lbSkills.ItemsSource);
            if (items != null)
            {
                items.Filter = SearchFilter;
            }
        }


public bool SearchFilter(object filterObject)
        {
           var filter = filterObject as <<List Box item type>>;
            if (filter == null)
            {
                return false;
            }

             <<Your search logic here.......>>        
}

С тех пор, текстовое изменение событие запускается при каждом нажатии клавиши, так что вы можете реализовать сделать задержку поиска. Вы можете следовать этой статье, чтобы реализовать это.

Вам нужно текстовое поле, кнопка и список или DataGrid.

Вы подключаете текстовое поле к свойству viewmodel. Подключите кнопку к свойству команды viewmodel. Подключите источник списка или сетки данных к наблюдаемому свойству списка в модели представления. Запустите поисковый запрос linq, когда кнопка будет выполнена, и заполните ее заметным списком.

Если вам нужно конкретное решение кода, отправьте комментарий.


Обновление 1:

Ссылка на пример проекта с помощью функции поиска https://mahowling.wordpress.com/2014/07/31/wpf-search-text-box-for-mvvm/

Другие вопросы по тегам