AutoSuggestBox повторяет поиск после ввода с клавиатуры - PullRequest
0 голосов
/ 05 марта 2020

Я работал над WinForms и WPF раньше, но я впервые работаю в UWP.

Я пытаюсь создать текстовое поле для этого поиска в списке элементов, и оно возвращает поиск и элементы списка, но когда вы пытаетесь перемещаться по ним с помощью клавиатуры, первый результат снова будет найден, что приведет к гибели остальной части поиска.

это код XAML для AutoSuggestBox:

<AutoSuggestBox
PlaceholderText="Buscar" QueryIcon="Find" ItemTemplateSelector="{StaticResource ExplorerItemTemplateSelector}"
ItemsSource="{x:Bind SearchResult}" TextChanged="AutoSuggestBox_TextChanged"
SuggestionChosen="AutoSuggestBox_SuggestionChosen" QuerySubmitted="AutoSuggestBox_QuerySubmitted"
/>

И это код C#:

        private void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
        {
            if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)
            {
                SearchResult = indexedTree.FindAll(x => x.Name.ToLower().Contains(sender.Text.ToLower()));

                if (SearchResult.Count < 0)
                    SearchResult.Clear();
                sender.ItemsSource = SearchResult;
            }
        }

        private void AutoSuggestBox_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args)
        {
            if (args.SelectedItem is ExplorerItem item)
                sender.Text = item.Name;
        }

        private void AutoSuggestBox_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)
        {
            if(args.ChosenSuggestion != null && args.ChosenSuggestion is ExplorerItem item)
            {
                sender.Text = item.Name;
                sender.ItemsSource = null;
            }
        }

Я предполагаю, что каким-то образом выбранное событие также вызывает событие изменения текста в качестве пользовательского ввода, но я не уверен, я посмотрел код галереи элементов управления XAML и в этом приложении работает нормально, а код действительно похож

1 Ответ

1 голос
/ 06 марта 2020

я предполагаю, что каким-то образом выбранное событие также вызывает событие изменения текста в качестве пользовательского ввода

Для моего тестирования событие SuggestionChosen будет не вызывает TextChanged, вызванное UserInput причиной. Даже мы установили sender.Text = item.Name. Если мы установим значение sender.Text, оно вызовет TextChanged, но аргумент args.Reason равен SuggestionChosen. Нам не нужно передавать элемент select в текстовое свойство AutoSuggestBox, и AutoSuggestBox автоматически получит значение select.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...