我在我的应用程序中使用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;
我在以下场景中需要帮助 -
上述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个具有相同名称的项目。但是需要选择正确的。
我该怎么做?我是否需要应用一些自定义过滤器? 如果是这样,怎么样?
答案 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
}