2012年5月31日 星期四

重要的 NavigationCacheMode

在 Windows RT 上做頁面的切換通常會利過 Frame 這個類別…
方法為 Frame.Navigate(typeof(NextPage));

在來回的同時可能會發現行為和外表很相像的 Windows Phone 有很大的不同…
Windows Phone 的架構上預設是除了儲存 Page History 之外還會有各頁的資料…
所以從 A 至 B 頁…再從 B 頁按 Back 回上頁時…會看到原先的狀態…
Windows 8 Metro Mode 則只會做瀏覽紀錄…頁面資料預設是不儲存的…
在 Constructor 上加 Log 可以發現 Back 時會產生一個新的前頁之 Instance…
另外還發現在 Preview SDK 上連 OnNavigatedTo 的參數有時也會不見造成 Crash…
參數被釋放這點在 Release 之後應該會修復…否則還頗可怕 :p

在 MSDN 此頁 Navigating between pages 最未正是在說明上述狀況…
所以若想要讓用戶 Back 時不再花時間和連線重新整理資料…
記得善用 NavigationCacheMode 屬性的設定…
在 Code 的部份我習慣寫在 Constructor 或 OnPageLoad 時如下…

public MainPage()
{
    InitializeComponent();
    NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
}

或是在 Xaml 中的 Page tag 加入此 attribute 如下…

<Page
    x:Class="HelloWorld.BlankPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:HelloWorld"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    NavigationCacheMode="Enabled">

沒有留言:

張貼留言