2014-10-28 2 views
2

В моем приложении Windows Phone есть ListBox (заполненный JSON) и TextBox, используемый для поиска элементов в ListBox.Текстовое поле, поиск без акцентов (игнорировать акценты)

Этот код отлично работает, но мне нужно найти «lapis» и найти «lápis». Итак, мне нужно игнорировать акценты в моем поиске.

Как это сделать?

 private void txtSearch_TextChanged(object sender, TextChangedEventArgs e) 
    { 
     if (Items != null) 
     { 
      this.List1.ItemsSource = Items.Where(w => w.descricao.ToUpper().Contains(SearchTextBox.Text.ToUpper())); 
     } 
    } 

    private void WatermarkTB_GotFocus(object sender, RoutedEventArgs e) 
    { 
     if (SearchTextBox.Text == "Pesquisar Produto...") 
     { 
      SearchTextBox.Text = ""; 
      SolidColorBrush Brush1 = new SolidColorBrush(); 
      Brush1.Color = Colors.Red; 
      SearchTextBox.Foreground = Brush1; 
     } 
    } 

ответ

3

Изменить

w.descricao.ToUpper().Contains(SearchTextBox.Text.ToUpper()) 

Для

CultureInfo.CurrentCulture.CompareInfo.IndexOf(
    w.descricao, 
    SearchTextBox.Text, 
    CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase) != -1 

Значение IgnoreNonSpace

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

+0

Я сделал, как вы сказали, но когда я нажимаю в текстовом поле, то ListBox пустая. –

+0

@ ReneSá Извините, я упустил часть 'Содержит'. Теперь это немного сложнее, но все же однострочный. См. Править. – lisp

+0

NIce! Теперь код работает отлично. Спасибо, брат, ты спасешь мой день! –

1

метод выдвижения:

public static string RemoveDiacritic(this string text) 
{ 
    return text.Normalize(NormalizationForm.FormD).Where(chara => CharUnicodeInfo.GetUnicodeCategory(chara) != UnicodeCategory.NonSpacingMark).Aggregate<char, string>(null, (current, character) => current + character); 
} 

Использование:

this.List1.ItemsSource = Items.Where(w => w.descricao.ToUpper().RemoveDiacritic().Contains(SearchTextBox.Text.ToUpper().RemoveDiacritic())); 
Смежные вопросы