假設有階層的需求,我們需要一個可以不斷的產生下一層的方法,也就是自我巡覽。
( 第一層) |
左圖為第一層,當按下One之後,將會巡覽到下一層(第二層),暫時以MessageBox提示來識別。 |
(第二層) |
左圖為第二層,當進入新的一層的時候,MessageBox會跳出訊息顯示”這是新頁面”。 |
(回到第一層) |
左圖為第一層,當按下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會失效,所以必須在後方加入一個變數,讓他每次不一樣,這邊可以依照需要自行決定需傳入的變數。
全站熱搜
留言列表