【发布时间】:2015-10-15 07:14:48
【问题描述】:
我正在尝试从外部 API 获取一定数量的数据并将其填充到视图的列表中。我的设置类似于以下(摘录):
ShellView
<xctk:BusyIndicator IsBusy="{Binding IsBusy}">
<ContentControl x:Name="ActiveItem" />
...
ShellViewModel
...
public bool IsBusy
{
get { return _isBusy; }
private set
{
_isBusy = value;
NotifyOfPropertyChange();
}
}
public void StartProgress()
{
IsBusy = true;
}
public void StopProgress()
{
IsBusy = false;
}
protected override void OnViewLoaded(object view)
{
base.OnViewLoaded(view);
// do some task
ActivateItem(SomeOtherViewModel);
}
SomeOtherViewModel
public SomeOtherViewModel(IBusyIndicator busy)
{
....
}
protected override void OnViewLoaded(object view)
{
base.OnViewLoaded(view);
Task.Factory.StartNew(ACTION,
CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default)
.ConfigureAwait(true);
}
基本上,工作流程是这样的:
- 初始化
Shell Shell-> OnViewLoaded- 做一些后台工作
- 初始化
SomeOtherViewModel(将IBusyIndicator注入,即Shell作为单例) SomeOtherViewModel -> OnViewLoaded- 做其他后台工作,就像上面的例子一样
但是,当我启动应用程序时,直到所有内容都加载完毕,我才看到视图。有没有办法:
- 仅当一切都可见时才执行操作 (WPF / Caliburn)
- 在不阻塞 UI/视图模型更新的情况下执行
Task?
【问题讨论】:
标签: c# wpf async-await task caliburn.micro