Windows Phone Toolkit自动完成框



我在应用程序中使用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>

在以下情况下我需要帮助-

上面的AutoCompleteBox的项源是一个类的对象列表,该类具有两个属性——Name和Color。

现在,当我在框中输入文本时,只需要按名称过滤项目,它们就会被过滤得很好。但是,如果我选择了项目,它就没有被正确选择。

情况如下-

假设有4个项目-

项目1-名称="铅笔",颜色="红色"

项目2-名称="铅笔",颜色="绿色"

项目3-名称="橡皮擦",颜色="红色"

项目4-名称="橡皮擦",颜色="绿色"

现在,我在自动完成框中输入文本"笔"。然后显示前2项。但如果我选择绿色铅笔,则会选择红色铅笔。

也许是因为这两个项目的"名称"都是"铅笔"。但我需要处理这种情况。可以有两个项目具有相同的名称。但是需要选择正确的一个。

我该怎么做?我需要应用一些自定义筛选器吗?如果是,如何?

我认为问题在于通过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
   }

最新更新