[英]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.