AutoCompleteBox с событием TextChanged неправильно выбирается - PullRequest
2 голосов
/ 08 октября 2011

Привет, я использую AutoCompleteBox , как это

<!-- XAML Code -->
<sdk:AutoCompleteBox Grid.Row="2"
         FilterMode="None"
         ItemsSource="{Binding Customers}"
         SelectedItem="{Binding Path=SelectedCustomer, Mode=TwoWay}"
         Text="{Binding CustomerSearchString, Mode=TwoWay}"
         ValueMemberBinding="{Binding Path=FullName}"
         ValueMemberPath="FullName"
         TextChanged="{ext:Invoke MethodName=Search, Source={Binding}}"/>

C # part:

// Search Method in the viewmodel
public void Search()
{
    var customerOperation = _context.Load(_context.GetCustomerByNameQuery(CustomerSearchString));
    customerOperation.Completed += (s, e) => Customers = new List<Customer>(customerOperation.Entities);
}

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

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

Как мне избежать этого поведения?

РЕШЕНИЕ:

ПроблемаДело в том, что событие TextChanged вызывалось, когда пользователь выбирал запись, создавая какое-то состояние гонки, такое как поведение, когда текст сбрасывался. Решением было использование события KeyUp (не используйте KeyDown, поскольку свойство Text еще не будет обновлено).Это событие не срабатывает, когда пользователь что-то выбирает, решая проблему.

Окончательный код (ViewModel без изменений):

<!-- XAML Code -->
<sdk:AutoCompleteBox Grid.Row="2"
         FilterMode="None"
         ItemsSource="{Binding Customers}"
         SelectedItem="{Binding Path=SelectedCustomer, Mode=TwoWay}"
         Text="{Binding CustomerSearchString, Mode=TwoWay}"
         ValueMemberBinding="{Binding Path=FullName}"
         ValueMemberPath="FullName"
         KeyUp="{ext:Invoke MethodName=Search, Source={Binding}}"/>

Спасибо всем!

Ответы [ 2 ]

2 голосов
/ 11 октября 2011

Добавьте такой обработчик в коде:

KeyEventHandler eventHandler = MyAutoCompleteBox_KeyDown;
MyAutoCompleteBox.AddHandler(KeyDownEvent, eventHandler, true);
0 голосов
/ 11 октября 2011

Я не понимаю, почему вы используете событие TextChanged ...?Для чего это?Если вы возьмете это, это работает?Я использую поле автозаполнения в своем проекте, и мне не нужен метод поиска ... все, что я делаю, это просто предоставляю список объектов в autocompletebox, и он ищет этот список при вводе пользователем.Я могу выбрать либо мышью, либо стрелками вверх / вниз.Единственное, о чем я могу подумать, это то, что каждый раз, когда вы пытаетесь использовать стрелку вверх / вниз, текст изменяется и отключает функцию поиска и закрывает выпадающий список выбора ...

...