[Windows Phone] 開發宜蘭縣政府資料開放平台應用程式 (3) 資料載入時要有載入中畫面

之前有寫過一篇文章 資料載入時要有載入中畫面,但學生在加入這段邏輯的過程中並不是很順利,主要是應用程式下載資料是採用非同步的作法,使用單執行緒的想法思考程式邏輯會有些問題。本文透過持續修改宜蘭縣政府資料開放平台應用程式,將這段邏輯加入其中。

 

前言

之前有寫過一篇文章 資料載入時要有載入中畫面,但學生在加入這段邏輯的過程中並不是很順利,主要是應用程式下載資料是採用非同步的作法,使用單執行緒的想法思考程式邏輯會有些問題。本文透過持續修改宜蘭縣政府資料開放平台應用程式,將這段邏輯加入其中。

 

錯誤的寫法

先下載先前文章 將下載的 CSV 資料儲存到 Isolated Storage 提供下次進入應用程式時載入 文章最後的範例。

以設計模式開啟 MainPage.xaml,將 SystemTray.IsVisible 設為 True,並且加入 ProgressIndicator

image

 

切換到程式碼,加入以下程式碼,在 App.ViewModel.LoadData() 資料載入事件前面顯示載入中畫面,後面隱藏載入中畫面。

image

 

實際執行程式時,你不會看到載入中畫面,這主要是 App.ViewModel.LoadData() 事件中採用非同步下載的方式,透過中斷點以及影片觀察流程,可能會對學生比較容易了解。

 

資料載入時要有載入中畫面

 

如果將隱藏載入中畫面的代碼註解掉。

image

 

你就會看到載入中的效果,但這不符合需求。

SNAGHTML2be68f4

 

 

可行的做法

可以正確做到資料載入時有載入中畫面的方法有很多,以下是其中一種寫法,

新增屬性 IsSystemTrayShow(是否顯示 SystemTray)綁定到 SystemTray 和 ProgressIndicator 的顯示或隱藏屬性,當 IsSystemTrayShow 異動時,將會反應到載入中畫面做顯示或隱藏。

接著就進行實作,重新下載先前文章 將下載的 CSV 資料儲存到 Isolated Storage 提供下次進入應用程式時載入 文章最後的範例。

開啟 MainViewModel.cs,新增屬性 IsSystemTrayShow(是否顯示 SystemTray)並且設定初始值。

image

 

在 LoadData() 資料剛載入時,設定 IsSystemTrayShow 為 true 表示顯示載入中畫面。

image

 

在 GetHttpDocumentCallback 資料載入完成時,設定 IsSystemTrayShow 為 false 表示隱藏載入中畫面。

image

 

將屬性 IsSystemTrayShow(是否顯示 SystemTray)綁定到 SystemTray 和 ProgressIndicator 的顯示或隱藏屬性。

image

 

以設計模式開啟 MainPage.xaml,將 SystemTray.IsVisible 設為 True。

image

 

執行程式,可以看到資料載入時有載入中畫面。

 

資料載入時要有載入中畫面

 

範例下載

HomeStayApp.zip