Как отфильтровать и автоматически предложить элементы поля со списком на основе введенного текста? - PullRequest
1 голос
/ 10 мая 2019

Я перешел по следующим ссылкам, чтобы создать собственное поле со списком. Я добавил список элементов комбинированного списка, используя c #.

Если я набираю текст в пользовательском поле со списком, он не фильтрует элементы на основе текста поиска, содержит ли элемент слово.

Пользовательское поле со списком просто перечисляет все элементы в нем. Я хочу, чтобы мое поле со списком действовало так, как если бы оно набирало слово, оно должно фильтровать результат и автоматически предлагать в поле со списком поиск.

<local:FilteredComboBox x:Name="FilteredCmb"  IsEditable="True"
            IsTextSearchEnabled="True" 
            Padding="4 3" 
            MinWidth="200" Grid.ColumnSpan="6" 
            Grid.Column="2" Margin="0,77,0,49" Grid.Row="1" />

Как этого добиться?

Возможно ли это с помощью комбинированного окна по умолчанию. Поле со списком по умолчанию автоматически предлагает элементы, которые начинаются с введенного текста, а не проверяет, содержится ли слово в элементе.

Создать пользовательский ComboBox1 Пользовательский ComboBox2

1 Ответ

0 голосов
/ 15 мая 2019

Я использовал событие комбинированного списка для фильтрации результата.

<local:FilteredComboBox x:Name="FilteredCmb"  IsEditable="True" 
IsTextSearchEnabled="False" **KeyUp="FilteredCmb_KeyUp"** Padding="4 3" MinWidth="200" 
Grid.ColumnSpan="6" Grid.Column="2" Margin="0,77,0,49" Grid.Row="1" />

C # Код

private void FilteredCmb_KeyUp(object sender, KeyEventArgs e)
{
    List<BoxItem> filteredItems = new List<BoxItem>();

    for (int i = 0; i < cmbItems.Count; i++)
    {
        string currentItem = cmbItems[i].Text.ToLower();

        // get the text in the editable combo box 
        string typedText = FilteredCmb.Text.ToLower();

        if (currentItem.Contains(typedText))
        {
            filteredItems.Add(cmbItems[i]);
        }

    }

// Clear the combo box before adding new items to Combo Box

    foreach(BoxItem item in filteredItems)
    {
        FilteredCmb.Items.Add(item);
    }

    FilteredCmb.IsDropDownOpen = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...