我正在构建一个 Windows 8 应用商店应用程序,但 CollectionViewSource 声称它返回的集合在涉及异步时有零项。
在我的 ViewModel 中,我有以下代码(请注意缺少一些内容以使其更易于解释)
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;
}
}
然后在 XAML 中,我将 GridView 的 ItemsSource 绑定到 Items,并且我拥有所有相关的 DataTemplates 来显示数据。
我的问题是,由于文件的异步获取,我的 Items 集合返回空并且 View 不显示任何数据。
如果我删除异步调用并内联创建 File 对象的模拟集合,则代码将按预期工作。
任何人都可以提出解决这个问题的方法吗?在 WPF 中,我会尝试为集合加载时创建一个布尔 isBusy 属性,但是对于这个新的异步内容来说,这感觉像是错误的事情。
任何指针都会很棒!
克里斯