2011-11-21 87 views
0

我有控制其中負載從外部服務數據。這工作正常,但控制要麼沒有任何數據或完整的數據。加載控制數據從外部

我將如何實現增加額外的模式爲「加載」和「錯誤加載」(或大意的東西)

我知道我大概可以使用OnPropertyChange告訴數據是否發生了變化,如何將這些控件我拿起下載失敗了嗎?

目前,我做這樣的事

wc.OpenReadCompleted += Feed; 
wc.OpenReadAsync(new Uri(formattedFeedUrl)); 

... 

private void Feed(object Sender, OpenReadCompletedEventArgs e) 
{ 
    if (e.Error != null) 
    { 
     return; // here I want to notify that there's a download error somehow to the usercontrol 
    } 
    using (Stream s = e.Result) 
    { 
     // here I populate the ObservableCollection and notifychange 

     // and somewhere here, if the xml does not generate any data i want to notify a control also. 

有什麼技術,我可以用它來顯示加載/錯誤的通知,而不是一個無人居住的控制,如果有一個的ServiceControl,而不是一個簡單的用戶控件,其有3個國家將工作。有沒有辦法根據綁定來控制狀態?

回答

0

的方法有很多,你可以達到你所要求的東西。

  1. 簡單的解決方案是在Grid元素中只有多個圖層,並根據控件的邏輯狀態切換其可見性。

  2. 另一種方法是將有具有狀態屬性和任一組被結合到不同的層,並每次您的邏輯狀態的變化或

  3. 綁定的更新可見性類型屬性的一個ViewModel直接映射到這些圖層的可見性,並且具有一個轉換器,該轉換器將正確的可見性返回到與控件狀態對應的圖層。

  4. 最後,你可以使用VisualStateManager來控制控件的狀態。

  5. 此外 - 你可以使用的DataTemplates或直接在代碼中創建和更新UI後面的內容。

這一切都取決於你知道什麼,你更喜歡什麼,以及你想要與你的代碼去哪裏。如果這是您的應用程序的一次性解決方案 - 我會使用具有某些Visibility屬性的ViewModel,因爲我個人更喜歡使用MVVM模式進行操作。如果你想擁有的是一個可重用的控制,那麼你可以在後面的代碼設置爲能見度簡單的解決方案,或使用VisualStateManager作爲最看中的一個。

現在想到的另一件事是,要有一個附加的依賴項屬性或一個行爲,您綁定到您的控件的狀態,它會自動覆蓋控件與某種進度指示器,所以你可以重用該adp /不同控件的行爲。

相關問題