Как я могу отфильтровать асинхронный список в C # UWP, используя MVVM? - PullRequest
0 голосов
/ 19 декабря 2018

Я разрабатываю приложение UWP по шаблону MVVM.

Я хочу отфильтровать список, который асинхронно заполняется из API в конструкторе MainPageViewModel, и в то же время я хочу показать ProgressRing впользовательский интерфейс.Для этого я использую класса Стивена Клири NotifyTaskCompletion для связывания Task.Result с ListView в XAML и видимости ProgressRing со свойством NotifyTaskCompletion.IsNotComplete.

Пока все здесь работает правильно: мы хотим отфильтровать этот список, используя текстовое поле, в которое пользователь может писать, но я не могу изменить Task.Result, чтобы показать отфильтрованный список, потому что он доступен только для чтения.

public MainPageViewModel()
{
    _listToShow = new NotifyTaskCompletion<List<Person>>(MyLists.getAsyncList());

}

Что не работает:

private void filter()
{
    _listToShow.Result = _completeList.Where(x => x.name.Contains(_textToFilter)).ToList();
}

Есть идеи, как изменить список после фильтрации без использования асинхронных методов void?

1 Ответ

0 голосов
/ 19 декабря 2018

Просто измените тип возвращаемого значения getAsyncList на Task, сделайте функцию равной await

_listToShow = await MyLists.getAsyncList();

public static async Task<List<Person>> getAsyncList()
{
// your api code to retrieve person list
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...