簡體   English   中英

WPF綁定未更新

[英]WPF Binding not being updated

在我的View模型上,我具有以下屬性:

public Visibility IsModelBusy { get; set; }

我有一個很長的處理任務,它可以:

private void DoSomething(object obj)
{
    IsModelBusy = Visibility.Visible;
    OnPropertyChanged("IsModelBusy"); 
    DoHeavyWork();
    IsModelBusy = Visibility.Collapsed;
    OnPropertyChanged("IsModelBusy");
}

我有一個綁定到IsModelBusy的UI元素:

<Border Visibility="{Binding IsModelBusy, UpdateSourceTrigger=PropertyChanged}">
...
</Border>

問題我的邊框從不可見,並且在執行繁重的任務時主窗口掛起(我無法在后台線程中運行此窗口)我嘗試將屬性更改后的調用包裝在傳遞給分派器的操作中,但是運氣不佳堅持。

現在,如果我這樣做:

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

隨着MessageBox的引入,UI似乎可以處理屬性更改的事件並正確更新。

問題在不使用后台任務的情況下,如何強制UI處理PropertyChanged事件?

您正在使用DoHeavyWork()阻止UI線程。

Dispatcher無法處理任何其他操作(例如刷新UI),因為它正在忙於執行代碼。

將其放在后台線程中。

經過大量的研究,我終於找到了我的問題的答案:

隨着MessageBox的引入,UI似乎可以處理屬性更改的事件並正確更新。

消息框強制應用程序處理其消息隊列,從而處理屬性更改的事件並更新UI。

在不使用后台任務的情況下,如何強制UI處理PropertyChanged事件?

無法解決此問題-我保留了消息框解決方案來強制UI處理所有事件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM