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

相关问题