Здравствуйте!
У меня на фрейме есть AutoSuggestBox. На событие изменения текста навешен такой код:
private void AsbSearch_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
{
_timer.Stop();
_timer.Start();
}
Интервал у таймера равен 100 миллисекундам. Вот код, выполняемый при тике:
private void _timer_Tick(object sender, object e)
{
_timer.Stop();
if (string.IsNullOrEmpty(AsbSearch.Text) || AsbSearch.Text == " ")
{
return;
}
AsbSearch_QuerySubmitted(AsbSearch, null);
}
Так вот, теперь все это плохо работает, поскольку поиск начинается несколько раз при вводе одного слова(быстрого ввода), причем первый поиск начинается примерно после ввода 3-4 символов.
Как мне решить эту проблему? Можно конечно оставить начало поиска лишь на нажатие Enter-а или соответствующей кнопки, но это нежелательно.
Обновление
По сути мне надо выходить из AsbSearch_QuerySubmitted(AsbSearch, null); при изменении запроса. Но как это сделать? Пробовал использование булевой переменной с периодической проверкой, но нет, все точно также.
Ответ
А если с таймером, то так пытались или иначе?
private bool _searching = false;
...
private void _timer_Tick(object sender, object e)
{
_timer.Stop();
//У нас уже идет поиск, выходим, даже текст смотреть не будем:
if (_searching) return;
if (string.IsNullOrEmpty(AsbSearch.Text) || AsbSearch.Text == " ")
{
return;
}
//Устанавливаем флаг того. что поиск начат:
_searching = true;
//Ищем:
AsbSearch_QuerySubmitted(AsbSearch, null);
//Поиск закончен....
_searching = false;
}
UPD: Вариант без таймера:
private string _PrevText = string.Empty;
...
private void AsbSearch_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
{
//Текущий текст для поиска:
string _CurrentText = AsbSearch.Text;
//Если предыдущий текст для поиска уже пустой, то можем искать текущий:
if (string.IsNullOrEmpty(_PrevText))
{
//Запоминаем в переменную предыдущего поиска значение для текущего поиска
_PrevText = _CurrentText;
//Ищем:
AsbSearch_QuerySubmitted(AsbSearch, null);
//После того, как поиск выполнен, очищаем переменную предыдущего поиска.
_PrevText = string.Empty;
}
}
Комментариев нет:
Отправить комментарий