Мне было интересно, можно ли установить следующий сценарий с помощью RX?Заполнение ObservableCollection с использованием RX
У меня есть вызов службы REST, на которой располагается расстояние и загружает данные входных параметров, эти данные, чем вставленный в ObservableCollection из ViewModel, так что View покажет данные ... Псевдо код, как это:
public async Task<int> LoadData(int distance)
{
this.ListOnUI.Clear();
var dataList = await Task.Run(() => _dataService.GetListAsync(distance));
foreach(var dataItem in dataList)
{
this.ListOnUI.Add(dataItem);
}
return dataList.Count;
}
Теперь этот небольшой фрагмент кода завернут внутри метода, который возвращает подсчет списка данных. Что я делаю с этим подсчетом, проверьте, не возвращается ли сумма, равная 20, если не помню метод с большим расстоянием.
Так что не так с этой установкой ...
- Каждый раз, когда вызывается метод список UI очищается
- Пользователь иногда приходится долго ждать, пока мы не достигнем 20 пунктов
- В то время как мы не достигли 20 пунктов, пользовательский интерфейс будет действовать странно с расчетом списка
Так что мое чувство кишки говорит мне, что это можно решить, используя RX, так или иначе, чтобы мы «купили» загрузку/добавление список пользовательского интерфейса ,
Но мои знания о RX недостаточно хороши для его решения ... так что любые идеи?
Замечание: Когда мы вызываем службу LoadData, мы получаем строку JSON, которая затем отображается в коллекцию DataItems, поэтому, если мы не очистим пользовательский интерфейс ObservableCollection и просто добавим их с каждой итерацией ... мы получим тот же элемент несколько раз в списке, потому что это новые объекты (хотя и с теми же данными).
Что конкретно представляет собой пользовательский интерфейс? Вы хотите заполнить список как можно скорее? Таким образом, если первый вызов возвращает 10 элементов, а второй вызов возвращает 20 с некоторым пересечением, тогда вы только изменяете список (добавление новых элементов и удаление их больше не присутствуют). Или что-то другое? Почему бы не вернуть список ('Задача>', когда у него есть 20 элементов и управлять вызовом внутри цикла в Задаче и заполнять пользовательский интерфейс с результатом? –
Каждый раз, когда есть данные, я хочу заполнить интерфейс, даже если мы не будем выбрали еще 20 элементов ... но напомнить, что вызов LoadData может занять время. – Depechie
OK. Что такое подпись GetListAsync? Почему она завернута в Task.Run, если она уже асинхронна? Просто чтобы выйти из диспетчера? –