C# 具有异步调用的GridView CollectionViewSource返回零项

C# 具有异步调用的GridView CollectionViewSource返回零项,c#,xaml,windows-8,async-await,C#,Xaml,Windows 8,Async Await,我正在构建一个Windows 8应用商店应用程序,但CollectionViewSource声称它返回的集合在涉及async时没有项目,我遇到了问题 在我的ViewModel中,我有以下代码(请注意,缺少了一些东西,使其更易于解释) public主视图模型(IFileRepository文件存储库) { items=新集合ViewSource(); _fileRepository=fileRepository; this.Construct(); items.Source=新的Observabl

我正在构建一个Windows 8应用商店应用程序,但CollectionViewSource声称它返回的集合在涉及async时没有项目,我遇到了问题

在我的ViewModel中,我有以下代码(请注意,缺少了一些东西,使其更易于解释)

public主视图模型(IFileRepository文件存储库)
{
items=新集合ViewSource();
_fileRepository=fileRepository;
this.Construct();
items.Source=新的ObservableCollection(文件);
}
私有异步void构造()
{
Files=新的observeCollection();
IList_files=await_fileRepository.GetFiles();
foreach(文件在_文件中)
{
添加(新文件视图模型(文件));
}
}
私人收藏查看源项目;
公共ICollectionView项目
{
得到
{
返回项目。查看;
}
}
然后在XAML中,我将一个GridView的ItemsSource绑定到Items,我已经准备好了所有相关的数据模板来显示数据

我的问题是,由于文件的异步获取,我的Items集合返回空,视图不显示任何数据

如果我删除异步调用并创建一个内嵌文件对象的模拟集合,代码将按预期工作

有人能提出解决这个问题的办法吗?在WPF中,我会尝试在集合加载时创建一个Boolean isBusy属性,但对于这个新的异步内容,这感觉是错误的

任何指针都会很棒


Kris

目前,当您为源创建ObservableCollection时,自您开始构造以来,文件是空的,但没有(a)等待它完成

我将避免使用第二个“包装器”ObservableCollection,并将Source=Files设置为,因此当构造代码写入文件时,CollectionViewSource将观察到它(这可能是您的实际意图)

public MainViewModel(IFileRepository fileRepository)
{
   items = new CollectionViewSource();
   _fileRepository = fileRepository;
   this.Construct();
   items.Source = new ObservableCollection<FileViewModel>(Files);
}

private async void Construct()
{
   Files = new ObservableCollection<FileViewModel>();
   IList _files = await _fileRepository.GetFiles();
   foreach (File file in _files)
   {
      Files.Add(new FileViewModel(file));
   }
}

private CollectionViewSource items;
public ICollectionView Items
{
    get
    {
        return items.View;
    }
}