我在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
的更新更加微妙且用户不知道?
答案 0 :(得分:0)
不是更新整个集合,而是仅添加,移动或删除ObservableCollection
中实际不同或已更改的项目。它实现了INotifyCollectionChanged
和INotifyPropertyChanged
,它将通知DataGrid。