2016-02-02 40 views
1

我正在使用WPF,Caliburn.Micro和WPF Extended Toolkit在更改显示的视图时显示忙指示符。问题是繁忙的指标不会显示在切换的视图之间(这就是为什么我需要它)。执行其他操作之前的WPF更新UI

它如何工作虽然残破

  1. 点击菜单项
  2. 设置IsBusy =真
  3. 没有忙指示灯显示出来
  4. 更改视图(ChangeActiveItem(视图模型,布尔))
  5. 查看显示器
  6. 忙显示器显示

它应该如何工作

  1. 点击菜单项
  2. 设置IsBusy =真
  3. 忙碌指示灯显示
  4. 更改视图
  5. 查看显示器,充分呈现
  6. IsBusy =假
  7. BusyIndi​​cator控件隐藏

ShellView(BusyIndi​​cator控件片段)

<xctk:BusyIndicator IsBusy="{Binding IsBusy}"> 
    <ContentControl x:Name="ActiveItem" /> 
</xctk:BusyIndicator> 

NavigationViewModel(方法 - 点击菜单项时触发)

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. Ayyappan萨勃拉曼尼亚建议
+0

我想你应该尝试worker.RunWorkerAsync() ; IsBusy = true; –

+0

那不行,不幸的是 – Jeff

回答

0
  • 变化isBusy地位runworkercompleted
  • 使isbusy公共财产
  • 在页面的构造函数中添加的datacontext
  • IsBusy = “{结合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(); 
    } 
    
+0

在视图更改后,这不会将IsBusy设置为true吗?使'BusyIndi​​cator'永远不会被隐藏。 – Jeff

+0

我试过创建两个工人。一个用于'IsBusy = True'和一个用于'ChangeActiveItem()'。我首先调用了IsBusy工作者,并在IsBusy工作者的RunWorkerCompleted中运行了ChangeActiveItem工作者。这没有奏效。 – Jeff

相关问题