C# WPF仅在用户操作之间将数据绑定到datagrid。如何强制更新到datagrid?
用户可以执行一个操作,我将数据添加到绑定到DataGrid的集合中,该集合工作正常 但是,当有一个长时间运行的进程将多个记录添加到集合中时,在进程结束之前,我从未看到数据网格被更新。我做错了什么?我真的是新手,所以我相信问题很简单C# WPF仅在用户操作之间将数据绑定到datagrid。如何强制更新到datagrid?,c#,wpf,datagrid,C#,Wpf,Datagrid,用户可以执行一个操作,我将数据添加到绑定到DataGrid的集合中,该集合工作正常 但是,当有一个长时间运行的进程将多个记录添加到集合中时,在进程结束之前,我从未看到数据网格被更新。我做错了什么?我真的是新手,所以我相信问题很简单 private ObservableCollection<StatusEntry> _collSe = new ObservableCollection<StatusEntry>(); public ObservableColle
private ObservableCollection<StatusEntry> _collSe = new ObservableCollection<StatusEntry>();
public ObservableCollection<StatusEntry> CollSe
{
get { return _collSe; }
set
{
_collSe = value;
// NotifyPropertyChanged("CollSe");
}
}
CollSe.Add(new StatusEntry() { TimeStamp = DateTime.Now, Comment = "STARTED: Translating file to DataTable" });
DataTable dt = ExcelHelper.ReadAsDataTable(tbFileName.Text);
CollSe.Add(new StatusEntry() { TimeStamp = DateTime.Now, Comment = "COMPLETE: Translating file to DataTable" });
编辑:
更清楚的是,这就是我所尝试的。。但直到最后,仍然不会更新UI
private void btnProcessFile_Click(object sender, RoutedEventArgs e)
{
//THis should happen as soon as the button is pressed
ThreadStart job = new ThreadStart(() =>
{
for (int i = 0; i < 20; i++)
{
// The new thread puts UI operations in the dispatching queue
Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() =>
{
CollSe.Add(new StatusEntry() { TimeStamp = DateTime.Now, Comment = "Happy Tools STARTED" });
}));
}
});
Thread thread = new Thread(job);
thread.Start();
//The another minute of processing here.....
我犯了一个错误,没有理解基本知识就提出问题,因此到处编码,不知道我在做什么。所以我想我现在明白了。这篇文章帮助我的头脑明白了这一点 主要的一点是要理解WPF有一个主线程和一个UI线程,以及如何从一个线程转到另一个线程以允许访问UI
嗯,就是这样。在集合更新之前,UI不会反映它。它是在同一个线程上吗?我认为这与线程与UI线程有关?不仅仅是数据网格。。它是任何图形用户界面。。在控件返回给用户之前,不会更新任何集合。当我执行.add时,集合会更新,对吗?我只是在等待绑定到该集合的UI恢复happen@punkouter当你的帖子上有超过一个人的评论时,你应该使用通知他们你的新评论,因为他们不会收到任何通知,而且不是每个人都会继续对之前评论过的问题进行投票。