4

ダウンロード マネージャーを作成しています。私の WPFDataGridは、進行中のダウンロードを表すオブジェクトのコレクションにバインドされています (別のスレッドで)。複数のダウンロードを実行している場合、それぞれが次のコードを使用してDataGridアイテムを毎秒更新しています。

if (DateTime.Now > download.LastUpdateTime.AddSeconds(1))
{
    this.downloadsGrid.Items.Refresh();
    download.LastUpdateTime = DateTime.Now;
}

Datagrid.Items.Refresh()仕事はしますが、全体DataGridを再構築するため、すべてのダウンロードDataGridで1秒間に他の行が数回更新されます。そのような動作は望ましくありません。の特定の行 (アイテム) を更新する方法はありますDataGridか?

4

2 に答える 2

9

DataGridをObservableCollection ( INotifyCollectionChangedを実装)にバインドすると、新しいアイテムが追加されたとき、またはアイテムが削除されたときにDataGridに通知されます。さらに、コレクション内のオブジェクトのプロパティを更新するだけの場合、オブジェクトはINotifyPropertyChangedを実装し、その値を更新するようにDataGridに指示するPropertyChangedイベントを発生させる必要があります。

于 2012-05-08T03:08:52.620 に答える
8

ダウンロードクラスは実装していますINotifyPropertyChangedか?そうでない場合は、グリッドの変更を確認するためにrefreshを呼び出す必要があるのはそのためです。実装INotifyPropertyChangedすると、値が変更されたときにバインディングが更新されます。

于 2012-05-07T19:22:21.173 に答える