定期刷新DataGrid C#WPF

时间:2016-03-30 10:14:21

标签: c# wpf xaml timer datagrid

我在C#DataGrid中有WPF,其中填充了Employees。基本上我需要定期读取Database,因为当Employees进入建筑物时,字段会被修改。我遇到了一些解决这种情况的最佳方法的问题。首先,这是我定义DataGrid;

的方式
public ICollectionView FilteredView { get; set; }
public ObservableCollection<EmployeeModel> Employees {get; set; }

private void OnPageLoad(object sender, RoutedEventArgs e)
{
    var _employeeDataService = new EmployeeDataService();
    Employees = _employeeDataService.HandleEmployeeSelect();
    FilteredView = CollectionViewSource.GetDefaultView(Employees);
    dataGrid.ItemsSource = FilteredView;
    DataContext = this;

    System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
    dispatcherTimer.Tick += new EventHandler(TimerTick);
    dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
    dispatcherTimer.Start();
}

本质上,当前每秒触发的TimerTick方法只是再次调用此方法,以便从数据库中检索整个表,并更新相应的字段(无论用户是否在建筑物中)。

正如我所说,这种方法有很多问题。首先,它看起来并不好看。由于DataGrid不断刷新,因此用户对网格执行的任何操作都很慢,并且每行的突出显示都会失真。

其次,我使用方法来过滤DataGrid。用户可以输入Employee的名称,并相应地过滤DataGrid。再一次因为DataGrid每秒刷新一次,所以在DataGrid上过滤几乎是不可能的,因为用户输入的所有内容都会每秒都撤消。

我知道我可以刷新DataGrid说每分钟会有很大改善,但是它仍然没有接近理想,我相信有更好的解决方案。如何改进此解决方案,以便DataGrid的更新更加微妙且用户不知道?

1 个答案:

答案 0 :(得分:0)

不是更新整个集合,而是仅添加,移动或删除ObservableCollection中实际不同或已更改的项目。它实现了INotifyCollectionChangedINotifyPropertyChanged,它将通知DataGrid。