0

私は C# で WPF アプリケーションを作成しており、その中で TFS で履歴を照会する必要があり、取得した変更セットのリストをリストビューに表示しています。

listview ItemsSource は、プロパティが使用されるまでロードされない Changeset と呼ばれる IEnumerable プロパティにバインドされます。

public IEnumerable<Changeset> Changesets
{
  get
  {
    if (p_nChangesets == null)
    {
      p_nChangesets = TfsHelper.VCS.QueryHistory(Path, VersionSpec.Latest, 0,
                                                 RecursionType.Full, null,
                                                 new ChangesetVersionSpec(1),
                                                 VersionSpec.Latest, int.MaxValue, 
                                                 false, true, false, false)
                                                 .OfType<Changeset>();
    }
    return p_nChangesets;
  }
}

ビューが読み込まれると、リストビューがこのプロパティにバインドされるため、すぐにプロパティを呼び出して変更セットのコレクションを取得します。このクエリの実行が遅い場合があるため、ウィンドウが開いていることを確認するのにも時間がかかります。私がしたいのは、ウィンドウがすぐに表示され、チェンジセットが見つかるまでリストビューが空になり、リストビューがいっぱいになることです。しかし、これを行う方法がわかりません。Task を使用してみましたが、結果は同じでした:

public IEnumerable<Changeset> Changesets
{
  get
  {
    if (p_nChangesets == null)
    {
      Task<IEnumerable> task = Task<IEnumerable>.Run(() => TfsHelper.VCS.QueryHistory(
                                                           Path, VersionSpec.Latest, 0, 
                                                           RecursionType.Full, null,
                                                           new ChangesetVersionSpec(1),
                                                           VersionSpec.Latest, int.MaxValue, 
                                                           false, true, false, false));
      p_nChangesets = task.Result.OfType<Changeset>();
    }
    return p_nChangesets;
  }
}

明らかに、タスクで何をしているのかわかりません。これを私が望むようにする方法を知っている人はいますか?

4

1 に答える 1

1

XAML でバインディングを追加IsAsync=Trueします。

<ListView ItemsSource="{Binding ChangeSets, IsAsync=True}"/>
于 2013-10-21T18:57:56.703 に答える