Нужно, чтобы SearchBar давал тот же результат, даже если это заглавные буквы или нет

Мне нужно, чтобы SearchBar давал тот же результат, даже если это заглавные буквы или нет.

Это код, который я использую для фильтрации:

myList.ItemsSource = wasteList.Where(x => x.WasteType.Contains(e.NewTextValue));

Я также пробовал следующее, но результаты SearchBar все еще разные:

myList.ItemsSource = wasteList.Where(x => x.WasteType.ToLower.Contains(e.NewTextValue));
myList.ItemsSource = wasteList.Where(x => x.WasteType.ToUpper.Contains(e.NewTextValue));

Пожалуйста, кто-нибудь не делает SearchBar нечувствительным к регистру?


person KalleP    schedule 10.07.2018    source источник


Ответы (3)


Сделайте оба значения ToLower (или ToUpper), а затем сравните их:

myList.ItemsSource = wasteList.Where(x => x.WasteType.ToLower.Contains(e.NewTextValue.ToLower));
person Alexandru Pupsa    schedule 10.07.2018
comment
Вызов ToLower для обоих string вызовет ненужные выделения памяти, которых можно было бы избежать. - person Bijington; 10.07.2018


В конечном счете, SearchBar не имеет ничего общего с чувствительностью к регистру, он просто дает вам пользовательский интерфейс и привязки/события, чтобы вы могли самостоятельно обрабатывать фильтрацию. Что вам нужно сделать, так это выполнить сравнение string без учета регистра при фильтрации списка.

Хорошим подходом было бы использование чего-то вроде этого метода расширения:

public static bool Contains(this string source, string value, StringComparison comparison)
{
    return source?.IndexOf(value, comparison) >= 0;
}

Затем, чтобы использовать его, вам просто нужно использовать:

myList.ItemsSource = wasteList.Where(x => x.WasteType.Contains(e.NewTextValue, StringComparison.OrdinalIgnoreCase));
person Bijington    schedule 10.07.2018