2010-10-25 173 views
6

我使用Binding IsAsync屬性來保持UI響應並從屬性的get訪問器中加載數據,並且在使用MVVM時證明是一個很好的選項。這種方法非常好,不需要任何手動代碼來進行異步操作。有幾個例子,我的數據加載需要幾秒鐘,在這段時間內,很難區分「無數據」和「數據加載」。是否有一個屬性可以檢測綁定「IsBusy」或「Loading」的狀態,以便我可以顯示一些消息,指出加載操作未完成?WPF綁定isAsync獲取狀態

任何幫助表示讚賞。

回答

7

According to the docs

在等待值到達,結合報告FallbackValue,如果可用,或綁定目標屬性的默認值。

您可以使用此值在加載綁定時向用戶顯示消息。

+0

謝謝Will ...試圖找到一種方法,通過viewmodel和/或xaml將其綁定到「等待」彈出窗口..爲WPF-MVVM應用程序模型提供了極大的簡便性。然而..看起來像沒有簡單的方法來實現這一點。 – Bhuvan 2010-12-20 02:13:11

+0

@Bhuvan:你也可以有一個公開的枚舉屬性,公開了虛擬機的當前狀態...已初始化,加載,就緒。然後,您可以將其綁定到UI中,並在這些狀態期間向用戶展示您想要的任何內容...... – Will 2011-07-22 11:22:01

17

我知道,它是一個古老的線程。但是,如果有人仍有意...

你可以使用PriorityBinding,有一個華麗的這篇文章中解釋例如: http://www.switchonthecode.com/tutorials/wpf-tutorial-priority-bindings

的想法是一個規定其PriorityBinding又定義了幾種常規綁定這樣:

<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <TextBlock.Text> 
     <PriorityBinding> 
     <Binding ElementName="MainWindow" Path="Slow" IsAsync="True" /> 
     <Binding ElementName="MainWindow" Path="Fast" /> 
     </PriorityBinding> 
    </TextBlock.Text> 
    </TextBlock> 

綁定順序決定優先級,優先級最高。在這種情況下,快速綁定(最低優先級)將立即填充textblock,因爲根據當時正在發生的情況,您可能會綁定到字符串屬性「Loading ...」或「Sorting ...」,並且存在沒有延遲。

但後來當緩慢的異步綁定屬性返回一個值時,它的優先級越高意味着它將接管,因爲它在列表中較早,並且它的結果將被綁定,顯示實際結果。

如果你需要填充一個進度彈出窗口,你可以在你的ViewModel的綁定屬性的getter中實現它,儘管我還沒有嘗試過這樣的東西。