Windows Phone Toolkit AutoCompleteBox

时间:2014-09-22 07:33:17

标签: xaml windows-phone-7 windows-phone-8 windows-phone wptoolkit

我在我的应用程序中使用WPToolkit的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>
&#13;
&#13;
&#13;

我在以下场景中需要帮助 -

上述AutoCompleteBox的itemsource是一个具有2个属性的类的对象列表 - 名称和颜色。

现在,当我在框中输入文本时,只需按名称过滤项目,并将它们过滤掉。但是,如果我选择该项目,则无法正确选择。

案例如下 -

假设有4个项目 -

第1项 - 名称=&#34;铅笔&#34;,颜色=&#34;红色&#34;

第2项 - 名称=&#34;铅笔&#34;,颜色=&#34;绿色&#34;

第3项 - 名称=&#34;橡皮擦&#34;,颜色=&#34;红色&#34;

第4项 - 名称=&#34;橡皮擦&#34;,颜色=&#34;绿色&#34;

现在我输入文字&#34; pen&#34;在AutoCompleteBox中。然后显示前两项。但如果我选择绿色铅笔,则选择红色铅笔。

也许是因为这两个项目都有&#34;名称&#34;作为&#34;铅笔&#34;。但我需要管理这种情况。 可以有2个具有相同名称的项目。但是需要选择正确的。

我该怎么做?我是否需要应用一些自定义过滤器? 如果是这样,怎么样?

1 个答案:

答案 0 :(得分:0)

我认为问题是通过ValueMemberBinding进行绑定。您可以删除它并使用ItemsSource代替。为此,您需要创建自己的过滤器并覆盖对象类的ToString()方法。 较短的解决方法是不对自动填充框使用选择更改事件,并在每个项目上使用Tap evant

    <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
   }