2010-09-09 75 views
2

我有一個SL應用程序從數據庫中讀取一些數據,我通過WCF服務來完成這些數據。由於此訪問,我遇到了一些延遲問題,所以我通過將所有數據加載到我的應用程序中的字典中解決了這個問題。現在我想確保應用程序只會在我加載所有這些信息後才顯示,我該怎麼做?我認爲只需在數據加載後放置InitializeComponents就足夠了,但事實並非如此。這裏是我的一些代碼:如何讓我的Silverlight應用程序在加載數據後顯示?

public Brasil() 
{ 
    //InitializeComponent(); 
    webService = new DataRetrieverReference.DataRetrieverClient(); 
    webService.GetCounterCompleted += new EventHandler<WebPortos.DataRetrieverReference.GetCounterCompletedEventArgs>(webService_GetCounterCompleted); 
    webService.GetCounterAsync(); 
    webService.GetDataCompleted += new EventHandler<DataRetrieverReference.GetDataCompletedEventArgs>(webService_GetDataCompleted); 

} 

void webService_GetCounterCompleted(object sender, WebPortos.DataRetrieverReference.GetCounterCompletedEventArgs e) 
{ 
    int counter = e.Result; 
    this.dictionary = new Dictionary<int, WebPortos.DataRetrieverReference.vwPortos_SEP>(); 

    for (int i = 0; i < counter; i++) 
    { 
     webService.GetDataAsync(i); 
    } 

    InitializeComponent(); 
} 

正如你所看到的,我把它放在我的數據加載方法中,但它沒有工作。有小費嗎?

回答

1

以任何方式推遲創建視圖是不好的做法。在構造函數中保留InitializeComponent! :)

你想要做的只是隱藏你的顯示,直到數據準備就緒。最簡單的方法(保持此示例簡單)首先將「可見性」設置爲摺疊在頁面上的某個父元素上,然後在加載數據後再次將其設置爲「可見」。

真實世界的解決方案涉及在數據加載時使用忙指標停止與特定區域/控件的交互。在你的代碼

+0

問題是,它是打算成爲現實世界的解決方案...我會在截止日期後修復它。 – 2010-09-09 17:04:33

+0

那麼爲什麼不使用busyindicator?只需將所有內容放入一個,並設置IsBusy屬性來控制它。歡呼 – 2010-09-09 17:29:06

0

展望GetDataAsync正在爲每一組數據的異步請求,然後執行的InitializeComponent之後。所以你需要延遲InitializeComponent調用,直到所有的GetDataCompleted回調被觸發並且所有的數據都被檢索到。

相關問題