我最近开始使用带有 MVVM Light Toolkit 的 MVVM 模型在 WPF 上进行开发。
我在 listboxView 中有一个列表框,它有一个 listboxViewModel。在 listboxViewModel 中,我有一个 ObseverableCollection ( items ),它在 setter 中引发了 PropertyChanged。
数据绑定到列表框没有问题。
问题是,当我尝试使用 Task 从我的数据库(在线资源)异步提取数据并更新items时,更改不会反映在 UI 上。
但是,如果我在没有任务的情况下调用该方法,导致 UI 冻结直到数据到达我,UI 会反映更改。
我在任务中使用的代码如下:
Task.Factory.StartNew(() =>
{
return new CCDatabase().CCDB;
}).ContinueWith(taskState =>
{
items = taskState.Result;
}, TaskScheduler.Default);
这没有任何意义。我最好的猜测是它与任务的上下文有关。但是,当我在项目的设置器中添加断点时,该值是正确的,即 5(5 是我在数据库表中的行数)。
我的问题是,如果我希望更新 UI 并同时获得 UI 的好处,而不是每次调用数据库时都冻结,那该怎么做。
我在 VS2010 中编码,所以我无法使用美妙的 async/await 魔法。我目前正在使用 EntityFramework 6.0 进行数据库调用。