嗨我使用的是AutoCompleteBox這樣AutoCompleteBox與TextChanged事件沒有選擇正確
<!-- 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#部分:
// 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事件,但那個不會觸發。
我怎樣才能避免這種情況?
SOLUTION:
的問題是,當用戶選擇一個條目,創建某種類似行爲的競爭條件,其中的文本得到重置TextChanged事件被解僱了。 解決方案是使用KeyUp事件(不要使用KeyDown,因爲Text屬性將不會更新)。當用戶選擇某些東西解決問題時,不會觸發此事件。
最終代碼(視圖模型不變):
<!-- 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}}"/>
謝謝大家!
嘿!謝謝,那幾乎就是解決方案,但是:a)我使用XAML-Markup,因爲我不需要代碼並使用KeyUp,因爲在KeyDown上Text屬性尚未更新。感謝並祝賀50分:D – LueTm