WPF 在执行其他操作之前更新 UI

本文关键字:更新 UI 操作 执行 其他 WPF | 更新日期: 2023-09-27 18:32:59

我正在使用WPF,Caliburn.Micro和WPF扩展工具包在更改显示的视图时显示繁忙指示器。 问题是繁忙指示器永远不会在正在切换的视图之间显示(这就是我需要它的原因(。

破碎时的工作原理

  1. 单击菜单项
  2. 设置忙碌 = 真
  3. 未显示繁忙指示器
  4. Change
  5. view (ChangeActiveItem(ViewModel, bool((
  6. 查看显示
  7. 忙线指示器显示

它应该如何工作

  1. 单击菜单项
  2. 设置忙碌 = 真
  3. 忙线显示
  4. 更改视图
  5. 视图 完全显示和渲染
  6. 忙 = 假
  7. 忙指示器隐藏

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();
}

也尝试过

  1. 将"PublishOnUiThread"更改为"PublishOnBackgroundThread">
  2. 阿亚潘·苏布拉曼尼亚建议

WPF 在执行其他操作之前更新 UI

  • 更改为运行工作程序中的忙碌状态已完成
  • 使繁忙的公共财产
  • 在页面构造函数中添加数据上下文
  • 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();
    }