0

グリッドに Infragistics XamDataGrid を使用しています。ObservableCollection にバインドされています。

ウィンドウのドロップダウンで選択が行われると、バックグラウンド スレッドでデータの要求が行われ、読み込みアニメーションが開始されます。データが受信されると、必要な作業がすべてバックグラウンド スレッドで実行されます。

私が直面している問題は、すべてのデータの準備が整ったら、グリッドがバインドされているコレクションを更新する必要があることです。これは、UI スレッドで行う必要があります。XamDataGrid がコレクションの変更を処理するために UI スレッドで作業を行っている間に、アニメーションが停止します。

私が知る限り、グリッドの読み込みとアニメーションの両方を同じ UI スレッドで実行する必要があるため、できることはあまりありません。

見逃したものはありますか?グリッドが新しい行を表示するために動作している間、アニメーションを実行し続ける方法はありますか?

4

1 に答える 1

1

最初に行うことは、パフォーマンス コストがどこにあるかを把握することです。UI を簡素化し、WPFPerf を使用してこれを理解しようとします。たとえば、グリッドに特に高価なデータ テンプレートがあることに気付く場合があります。

それでもパフォーマンスの問題がある場合は、更新を小さなグループにまとめて、それぞれのディスパッチャ メッセージで実行できます。擬似コード:

// running on BG thread
var data = server.GetTheData();

// have the data, so marshal back to the UI thread in batches of 5
foreach (var batch in data.Batch(5))
{
    dispatcher.Invoke(..., batch);
}
于 2012-04-02T19:39:02.410 に答える