2012-05-07 7 views
2

私はダウンロードマネージャを作成しています。私のWPFデータグリッドは、進行中のダウンロードを表すオブジェクトのコレクション(別々のスレッド)にバインドされています。私が実行している複数のダウンロードを持っている場合は、それぞれが毎秒そのデータグリッドの項目を更新するには、このコードを使用している:WPF Datagridで単一行を更新する

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

Datagrid.Items.Refresh()仕事をしていませんが、それがすべてのダウンロードを引き起こし、全体のデータグリッドを再構築しますそれぞれの他のデータグリッドの行を1秒間に何度か更新する必要があります。私はそのような動作を望んでいません。データグリッド内の特定の行(アイテム)をリフレッシュする方法はありますか?

答えて

6

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

+0

shriekとDan Bushaありがとうございました。 List がありますが、ObservableCollection に切り替えて、WebDownloadClientでDataGridを更新するたびにPropertyChangedイベントハンドラを呼び出すことでINotifyPropertyChangedを実装します。 – marko

+0

観察可能なコレクション内のアイテムの状態に応じて背景色を変更したい場合はどうすればよいですか? –

+0

DataRowのスタイルを変更し、ObservableCollectionの行項目の背景値をBrushプロパティにバインドする必要があります –

8

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

関連する問題