0

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プロパティを作成しようとしましたが、これはこの新しい非同期のものでは間違っているように感じます。

どんなポインタも素晴らしいでしょう!

クリス

4

1 に答える 1

1

現状では、ソースのObservableCollectionを作成すると、Constructを開始してからファイルは空になりますが、(a)終了するのを待ちませんでした。

2番目の「ラッパー」ObservableCollectionを避け、Source = Filesを設定するので、ConstructコードがFilesに書き込むときに、CollectionViewSourceによって監視されます(これはおそらく実際の意図です)

于 2012-09-16T20:02:27.240 に答える