方案: 在View Model中有一个绑定到数据表的数据网格。此数据表引用将注入Model,并使用后台线程进行更新。
结果: 更新基础数据表后,Datagrid不会立即刷新,但如果我在不同选项卡之间切换,则datagrid将显示数据表中存在的最新值。
答案 0 :(得分:1)
一种常见的方法是启动 background task 来更新数据表异步,并在使用.ContinueWith
完成此操作时进行连接以更新UI。
Task.Factory.StartNew(() => { ..Do the background DataTable update.. })
.ContinueWith(task => {.. Update the UI.. });
但由于STA限制,您必须 dispatch .ContinueWith
对主线程的操作。
Task.Factory.StartNew(() => { ..Do the background DataTable update.. })
.ContinueWith(task =>
{
var dispatcher = Application.Current == null
? Dispatcher.CurrentDispatcher
: Application.Current.Dispatcher;
Action action = delegate()
{
//Update UI (e.g. Raise NotifyPropertyChanged on bound DataTable Property)
};
dispatcher.Invoke(DispatcherPriority.Normal, action);
});
由于Dispatching操作是一个重复操作,我建议将逻辑放入ViewModelBase类中以减少代码,如下所示:
Task.Factory.StartNew(() => ..Do the background DataTable update..)
.ContinueWith(task => Dispatch(() =>
{
//Update UI
}));
要更新UI,您可以使用INotifyPropertyChanged的公共通知来提升绑定数据表上的属性更改事件。