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コレクションが空を返し、ビューにデータが表示されないことです。
非同期呼び出しを削除し、Fileオブジェクトのモックコレクションをインラインで作成すると、コードは期待どおりに機能します。
誰かがこれを回避する方法を提案できますか?WPFでは、コレクションの読み込み時にブール値のisBusyプロパティを作成しようとしましたが、これはこの新しい非同期のものでは間違っているように感じます。
どんなポインタも素晴らしいでしょう!
クリス