Привет, я использую 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}}"/>
Спасибо всем!