Набор инструментов Windows Phone AutoCompleteBox

Я использую AutoCompleteBox WPToolkit в своем приложении.

XAML is as follows-

<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 — Имя = «Ластик», Цвет = «Зеленый»

Теперь я ввожу текст «ручка» в AutoCompleteBox. Затем отображаются первые 2 элемента. Но если я выберу зеленый карандаш, вместо него будет выбран красный карандаш.

Может быть, потому что у обоих предметов «Имя» как «Карандаш». Но мне нужно управлять этим сценарием. Может быть 2 предмета с одинаковым названием. но нужно выбрать правильный.

Как я могу это сделать? Нужно ли применять какой-то пользовательский фильтр? Если да, то как?


person kshitijgandhi    schedule 22.09.2014    source источник


Ответы (1)


Думаю проблема в привязке через 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>

And in 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
   }
person Dacian Mujdar    schedule 22.09.2014
comment
Любая идея или ссылка на то, как я могу создать фильтр? - person kshitijgandhi; 23.09.2014