0

我在我的應用程序中使用WPToolkit的AutoCompleteBox。Windows Phone工具包AutoCompleteBox

XAML如下 -

<toolkit:AutoCompleteBox Name="ACB" ValueMemberBinding="{Binding Name}" MinimumPrefixLength="0" IsTextCompletionEnabled="False" SelectionChanged="ACB_SelectionChanged"> 
 
    <toolkit:AutoCompleteBox.ItemTemplate> 
 
     <DataTemplate> 
 
      <StackPanel> 
 
       <TextBlock Text="{Binding Name}"/> 
 
       <TextBlock Text="{Binding Color}"/> 
 
      </StackPanel> 
 
     </DataTemplate> 
 
    </toolkit:AutoCompleteBox.ItemTemplate> 
 
</toolkit:AutoCompleteBox>

我需要幫助下面的scenario-

上述AutoCompleteBox的的ItemSource是一個類的對象有2個屬性列表 - 名稱和顏色。

現在,當我在框中輸入文本時,項目只需要按名稱過濾,並且過濾得很好。但是,如果我選擇該項目,它沒有被正確選擇。

的情況是如下 -

假設有4物品─

1項 - 名稱= 「鉛筆」,顏色= 「紅色」

第2項 - 名稱= 「鉛筆」 ,顏色= 「綠色」

第3項 - NAME = 「橡皮擦」,顏色= 「紅色」

第4項 - NAME = 「橡皮擦」,顏色= 「綠色」

現在我在AutoCompleteBox中輸入文本「筆」。然後顯示前兩項。但如果我選擇綠色鉛筆,則選擇紅色鉛筆。

也許因爲這兩個項目的「名稱」爲「鉛筆」。但我需要管理這種情況。 可以有2個同名的項目。但需要選擇正確的一個。

我該怎麼做?我需要應用一些自定義過濾器嗎? 如果是這樣,怎麼樣?

回答

0

我認爲問題是通過ValueMemberBinding綁定。您可以將其刪除並改爲使用ItemsSource。爲此,您需要創建自己的過濾器並覆蓋對象類的ToString()方法。 較短的解決辦法是不使用的選擇更改事件爲您自動完成框,並在每個項目上

<toolkit:AutoCompleteBox Name="ACB" ValueMemberBinding="{Binding Name}" MinimumPrefixLength="0" IsTextCompletionEnabled="False" > 
<toolkit:AutoCompleteBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel Tap="TapEvent"> 
      <TextBlock Text="{Binding Name}"/> 
      <TextBlock Text="{Binding Color}"/> 
     </StackPanel> 
    </DataTemplate> 
</toolkit:AutoCompleteBox.ItemTemplate> 

而在C#中使用自來水埃文特:

private void TapEvent(object sender, RoutedEventArgs e) 
    { 
     StackPanel stack = sender as StackPanel; 
     if (stack == null) return; 

     MyClass item = stack.DataContext as MyClass; 
     if (item == null) return; 

     //here I have the selected item which I want 
    } 
+0

任何想法或連結如何我可以創建一個過濾器? – kshitijgandhi 2014-09-23 04:21:04

相關問題