0

我在我的应用程序中使用了 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 的 itemsource 是具有 2 个属性的类的对象列表 - 名称和颜色。

现在,当我在框中输入文本时,只需按名称过滤项目,它们就可以很好地过滤。但是,如果我选择该项目,则未正确选择。

案例如下——

假设有4个项目-

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

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

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

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

现在我在 AutoCompleteBox 中输入文本“pen”。然后显示前 2 个项目。但是,如果我选择绿铅笔,则会选择红铅笔。

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

我怎样才能做到这一点?我需要应用一些自定义过滤器吗?如果是这样,怎么做?

4

1 回答 1

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
   }
于 2014-09-22T10:36:04.763 回答