WPF绑定未更新

GET*_*Tah -1 c# wpf binding

在我的View模型中,我有以下属性:

public Visibility IsModelBusy { get; set; }
Run Code Online (Sandbox Code Playgroud)

我有一个很长的处理任务:

private void DoSomething(object obj)
{
    IsModelBusy = Visibility.Visible;
    OnPropertyChanged("IsModelBusy"); 
    DoHeavyWork();
    IsModelBusy = Visibility.Collapsed;
    OnPropertyChanged("IsModelBusy");
}
Run Code Online (Sandbox Code Playgroud)

我有一个绑定到的UI元素IsModelBusy:

<Border Visibility="{Binding IsModelBusy, UpdateSourceTrigger=PropertyChanged}">
...
</Border>
Run Code Online (Sandbox Code Playgroud)

问题 我的边框永远不可见,主窗口挂起,而繁重的任务正在进行中(我无法在后台线程中运行)我尝试在传递给调度程序的操作中包装属性更改调用,没有运气,问题仍然存在仍然存在.

现在,如果我这样做:

private void DoSomething(object obj)
{
    IsModelBusy = Visibility.Visible;
    OnPropertyChanged("IsModelBusy"); 
    MessageBox.Show("What the...");  <=========
    DoHeavyWork();
    IsModelBusy = Visibility.Collapsed;
    OnPropertyChanged("IsModelBusy");
}
Run Code Online (Sandbox Code Playgroud)

随着介绍MessageBox,UI似乎处理属性更改事件并正确更新.

问题 如果不使用后台任务,我如何强制UI处理PropertyChanged事件?

Fed*_*gui 5

你用你的阻止UI线程DoHeavyWork().

Dispatcher无法处理任何其他操作(例如刷新UI),因为它正在忙于执行代码.

把它放在后台线程中.