我在这里遇到了一个新问题。我有一个MainWindow,其中是一个ContentGrid,在这是一个框架。现在我已经创建了不同的页面,可以在这个“内容区域”中显示。在其中一个页面中,有一个Datagrid绑定到CollectionViewSource,Source是一个数据库(通过EntityFramework)。现在,当发生对此数据库表的更改时(通过ServiceBroker和SQLDependency解决,触发工作正常)Datagrid必须更新。 现在问题: “Dependency_OnChange”-Event正在MainWindow-Thread中工作。当我尝试访问页面的CollectionViewSource以更新它(cvs.View.Refresh)时,我得到一个异常,这是不可能的,因为另一个拥有此CVS的线程。
我尝试过不同的Dispatching,如:
Application.Current.Dispatcher.Invoke((Action)(()=>
{
cvs.Source = _db.Table.OrderByDescending(nr => nr.Date).Take(200);
cvs.View.Refresh();
}));
此Codeblock不会带来异常,但我也不会更新UI ......似乎它什么也没做。
任何人都可以帮助我吗?
答案 0 :(得分:1)
如果您的LINQ查询评估,您的数据网格将更新。现在它只是指定了LINQ IEnumerable,但没有对它进行评估。
cvs.Source = _db.Table.OrderByDescending(nr => nr.Date).Take(200).ToList();
应该为你做LINQ的评估......
虽然我必须说你的cvs.View.Refresh()
电话非常昂贵,因为它会导致整个网格刷新。您可能需要考虑更好的设计。
为什么不直接将dataGrid.ItemsSource = _db.Table.DefaultView
设置为数据网格的项目源。我想如果你的表更新(和peforms _db.Table.AcceptChanges();
),视图会自动通知对网格的更改,网格可能会更快地自我更新!
但这仅仅是我的意见,因为我不知道你的线程上下文。但仍然尝试让我知道。