如何使用MVVM在C#UWP中过滤异步列表?

时间:2018-12-19 13:00:07

标签: c# api asynchronous mvvm uwp

我正在按照MVVM模式开发UWP应用程序。

我想过滤从MainPageViewModel构造函数中的API异步填充的列表,同时我想在UI中显示一个ProgressRing。为此,我使用Stephen Cleary's NotifyTaskCompletion class将Task.Result绑定到XAML中的ListView上,并将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 :(得分:0)

只需将您的getAsyncList返回类型更改为Task,将函数更改为await

_listToShow = await MyLists.getAsyncList();

public static async Task<List<Person>> getAsyncList()
{
// your api code to retrieve person list
}