Я разрабатываю мобильное приложение Xamarin Forms, на котором есть страница, содержащая элементы управления SearchBar, ListView и Map. В представлении списка содержится список адресов, которые отображаются в виде контактов на карте.
Когда пользователь вводит в SearchBar, ListView автоматически обновляется (посредством привязки ViewModel). Метод ViewModel, который фильтрует источник данных для списка, выглядит примерно так:
void FilterList()
{
listDataSource = new ObservableCollection<location>(
locationData.Where(l => l.Address.Contains(searchBar.Text))
);
// ***** Now, update the map pins using the data in listDataSource
}
Я хочу обновить карту, поскольку ListView фильтруется, но не на КАЖДОМ нажатии, поскольку это может происходить несколько раз в секунду. По сути, я хочу, чтобы "календарная пауза" в каждом событии FilterList до обновления Карты. В псевдокоде...
// ***** Now, update the map pins using the data in listDataSource
if (a previously-requested map update is pending)
{
// Cancel the pending map update request
}
// Request a new map update in 1000ms using [listDataSource]
Это можно сделать с помощью класса Секундомер, который доступен в портативных библиотеках классов, но я подозреваю, что для этого это более чистый/лучший способ, используя Задачи.
Может ли кто-нибудь предложить "умнее" совместимый с PCL способ сделать это?