marko
marko

Reputation: 217

Update single row in a WPF DataGrid

I'm creating a download manager, and my WPF DataGrid is bound to a collection of objects representing ongoing downloads (in separate threads). When I have multiple downloads running, each one is using this code to update its DataGrid item every second:

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

Datagrid.Items.Refresh() does the job, but it reconstructs the whole DataGrid , causing all downloads to update each others DataGrid rows several times in one second, and I don't want that kind of behavior. Is there any way to refresh a specific row (item) in a DataGrid?

Upvotes: 4

Views: 17492

Answers (2)

Dan Busha
Dan Busha

Reputation: 3803

If you bind your DataGrid to an ObservableCollection (which implements INotifyCollectionChanged) your DataGrid will be notified when a new item is added or an item is remove. Additionally, if you're just updating a property on an object in the collection the object should implement INotifyPropertyChanged and raise the PropertyChanged event which will tell the DataGrid to just update that value.

Upvotes: 9

shriek
shriek

Reputation: 5197

Does your download class implement INotifyPropertyChanged? If not, that's why you have to call refresh to see a change in the grid. If you implement INotifyPropertyChanged the binding will be updated when the value is changed.

Upvotes: 8

Related Questions