假設有階層的需求,我們需要一個可以不斷的產生下一層的方法,也就是自我巡覽

 1  

第一層)

左圖為第一層,當按下One之後,將會巡覽到下一層(第二層),暫時以MessageBox提示來識別。

 2

(第二層)

左圖為第二層,當進入新的一層的時候,MessageBox會跳出訊息顯示這是新頁面

 3

(回到第一層)

左圖為第一層,當按下Back鍵回到上一頁時,MessageBox會跳出這是上一頁

詳細的實作程式碼如下,

 

C#
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    string pageStr = "";

    switch (e.NavigationMode)
    {
        case System.Windows.Navigation.NavigationMode.New:
            pageStr = "這是新頁面";

            break;
        case System.Windows.Navigation.NavigationMode.Back:
            pageStr = "這是上一頁";

            break;
    }

    MessageBox.Show(pageStr);
    base.OnNavigatedTo(e);
}

// 載入 ViewModel 項目的資料
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    if (!App.ViewModel.IsDataLoaded)
    {
        App.ViewModel.LoadData();
    }
}

private void ListBox_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
    // 點下去巡覽下一頁(使用Now.tick來創造不同的URI達成同一頁自我巡覽)
    NavigationService.Navigate(new Uri("/MainPage.xaml?" + DateTime.Now.Ticks, UriKind.Relative));

    ListBox listbox = sender as ListBox;
    int index = listbox.SelectedIndex;

    MessageBox.Show
    (
        "標題 = " + App.ViewModel.Items[index].LineOne + "\r\n" +
        "內文 = " + App.ViewModel.Items[index].LineTwo + "\r\n"
    );
}

在自我巡覽中,每一層的 NavigationService字串必須是不一樣的,如果想巡覽下一層,但下一層NavigationService字串跟目前這一層是一樣的,會發生無法巡覽下一層的情況,

也就是NavigationService.Navigate會失效,所以必須在後方加入一個變數,讓他每次不一樣,這邊可以依照需要自行決定需傳入的變數。

全站熱搜

小賢 發表在 痞客邦 留言(0) 人氣()