WPF 在执行其他操作之前更新 UI
本文关键字:更新 UI 操作 执行 其他 WPF | 更新日期: 2023-09-27 18:32:59
我正在使用WPF,Caliburn.Micro和WPF扩展工具包在更改显示的视图时显示繁忙指示器。 问题是繁忙指示器永远不会在正在切换的视图之间显示(这就是我需要它的原因(。
破碎时的工作原理
- 单击菜单项
- 设置忙碌 = 真
- 未显示繁忙指示器 Change
- view (ChangeActiveItem(ViewModel, bool((
- 查看显示
- 忙线指示器显示
它应该如何工作
- 单击菜单项
- 设置忙碌 = 真
- 忙线显示
- 更改视图
- 视图 完全显示和渲染
- 忙 = 假
- 忙指示器隐藏
ShellView (BusyIndicator Snippet(
<xctk:BusyIndicator IsBusy="{Binding IsBusy}">
<ContentControl x:Name="ActiveItem" />
</xctk:BusyIndicator>
导航视图模型(方法 - 单击菜单项时触发(
public void NavigationItemClicked(NavigationItem item)
{
_eventAggregator.PublishOnUIThread(new NavigationItemClicked(item.ViewModelType));
}
ShellViewModel (方法 - 从 NavigationViewModel.NavigationItemClicked( 捕获消息(
public void Handle(NavigationItemClicked message)
{
worker = new BackgroundWorker();
worker.DoWork += (s, e) =>
{
ChangeActiveItem(QuestDetails, true);
IsBusy = false;
};
IsBusy = true;
worker.RunWorkerAsync();
}
也尝试过
- 将"PublishOnUiThread"更改为"PublishOnBackgroundThread">
- 阿亚潘·苏布拉曼尼亚建议
- 更改为运行工作程序中的忙碌状态已完成
- 使繁忙的公共财产
- 在页面构造函数中添加数据上下文
-
IsBusy="{Binding IsBusy,UpdateSourceTrigger=PropertyChanged }">
public void Handle(NavigationItemClicked message) { worker = new BackgroundWorker(); worker.DoWork += (s, e) => { ChangeActiveItem(QuestDetails, true); IsBusy = false; }; worker.RunWorkerCompleted += (s, e) => { IsBusy = true; }; worker.RunWorkerAsync(); }