我正在按照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方法的情况下如何在过滤后更改列表的任何想法?
答案 0 :(得分:0)
只需将您的getAsyncList返回类型更改为Task
,将函数更改为await
_listToShow = await MyLists.getAsyncList();
public static async Task<List<Person>> getAsyncList()
{
// your api code to retrieve person list
}