問題
往往當需要顯示一個新的頁面的時候,可能會接收來自其他頁面所傳送出來的參數並且根據這些參數進行準備這個頁面要顯示的資料,但是,很多時候,要準備的資料可能會來自於檔案系統內的檔案、網路上的 Web API等等,這些進行頁面資料初始化的動作時候,很多需要滿多的時間來進行執行,如何進行這樣的工作設計呢?
解答
很多人會把頁面資料初始化的工作,都放在建構式內,但是,這樣會產生一個問題,那就是當這個頁面物件要建立起來的時候,會花費較多的時間,這將會導致當要切換到新頁面的時候,可能需要等候一段時間,才能夠看到新的頁面出現,這樣的設計方式,會造成使用者以為應用程式有嚴重延遲特性,這是一個不是很好的設計方式。
有人會在建構式內放入 await 的非同步的呼叫方法,這樣的作法不被 C# 所允許的。
在這裡有兩個方式可以來處理這樣的情況,在底下的方法都是透過事件呼叫的方式來處理,因此,您可以在這裡使用 Async / Await 的非同步呼叫方法。
- 使用每個頁面檢視的 call behind OnAppearing() 方法
protected override void OnAppearing()
{
base.OnAppearing();
}
- 另外一種作法,那就是在檢視模型 ViewModel 內的
OnNavigatedFrom
/OnNavigatedTo
,如此,
public void OnNavigatedFrom(NavigationParameters parameters)
{
}
public void OnNavigatedTo(NavigationParameters parameters)
{
Init();
}