我正在创建一个下载管理器,我的WPF数据网格绑定到表示正在进行下载的对象集合(在单独的线程中)。当我运行多个下载时,每个人都使用此代码每秒更新其datagrid项目:
if (DateTime.Now > download.LastUpdateTime.AddSeconds(1))
{
this.downloadsGrid.Items.Refresh();
download.LastUpdateTime = DateTime.Now;
}
Datagrid.Items.Refresh()完成这项工作,但它会重建整个数据网格,导致所有下载在一秒钟内多次更新其他数据网格行,我不希望出现这种行为。有没有办法刷新数据网格中的特定行(项)?
答案 0 :(得分:8)
您的下载类是否实现了INotifyPropertyChanged
?如果没有,那就是为什么你必须调用refresh才能看到网格中的变化。如果实现INotifyPropertyChanged
,则在更改值时将更新绑定。
答案 1 :(得分:6)
如果将DataGrid绑定到ObservableCollection(实现INotifyCollectionChanged),则会在添加新项目或删除项目时通知DataGrid。此外,如果您只是更新集合中对象的属性,则对象应实现INotifyPropertyChanged并引发PropertyChanged事件,该事件将告诉DataGrid仅更新该值。