如何在Windows Phone app 8.1中使用以前调用的Web服务数据导航回页面?

时间:2015-01-03 07:38:42

标签: windows-phone-8.1

我有一个Windows Phone 8.1的基本应用程序,这是一个空白的应用程序; 我想导航到我的上一页,而不调用我之前调用的Web服务。 是否有任何堆栈或任何历史记录方法,我可以轻松管理上一页。

 Frame rootFrame = Window.Current.Content as Frame;
 if (rootFrame != null && rootFrame.CanGoBack)
 {
     rootFrame.GoBack();
     e.Handled = true;
 }

此代码无法使用我的框架。因为它向我发送应用程序开始的第一页......

完整代码

当然---------------- Page 1设计

<Grid>
         <Button Click="Button_Click" Content="Page 1" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
        <StackPanel Grid.Row="1"
            >
            <HyperlinkButton Content="Click to go to page 2" Click="HyperlinkButton_Click"/>
        </StackPanel></Grid>

第1页代码

  private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
        {
            this.Frame.Navigate(typeof(Page2));
        }
第2页设计...............

 <Grid>
        <Button Click="Button_Click" Content="Page 2" HorizontalAlignment="Left" VerticalAlignment="Top"/>
       
    </Grid>

第2页代码---------

public Page2()
        {
            this.InitializeComponent();
            this.NavigationCacheMode=NavigationCacheMode.Enabled;
            Windows.Phone.UI.Input.HardwareButtons.BackPressed += Page2HardwareButtons_BackPressed;
        }
        void Page2HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
        {
            e.Handled = true;
            if (Frame.CanGoBack && Frame.SourcePageType.FullName == "Test.Page2")
            {
              
                Frame.GoBack();

            }
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            if (e.NavigationMode != NavigationMode.Back)
            {
               
            }
             
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            this.Frame.Navigate(typeof(Page3));
        }

第3页设计-----

 <Grid>
        <Button Click="Button_Click" Content="Page 3" HorizontalAlignment="Left" VerticalAlignment="Top"/>
      
    </Grid>

第3页代码------

public Page3()
        {
            this.InitializeComponent();
            this.NavigationCacheMode = NavigationCacheMode.Enabled;
            Windows.Phone.UI.Input.HardwareButtons.BackPressed += Page3HardwareButtons_BackPressed;
        }

        void Page3HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
        {
            e.Handled = true;
            if (Frame.CanGoBack && Frame.SourcePageType.FullName == "Test.Page3")
            {
                Frame.GoBack();
            }
        }


         protected override void OnNavigatedTo(NavigationEventArgs e)
        {
             
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            this.Frame.Navigate(typeof(Page3));
        }

请重播.........

1 个答案:

答案 0 :(得分:2)

新答案

您不会注销BackPressed事件,但每次加载页面时仍会添加它们,因此会多次执行。

正确取消注册您的活动。 在这种情况下,这样做的好地方是页面 Unloaded Event。

您还可以查看Visual Studio模板中包含的 NavigationHelper 类。


旧回答

每个页面都有一个 NavigationCacheMode 属性,并且通过将其设置为启用(仅在构造函数中有效),您可以在导航时保留它的实例。

public MainPage() {
  this.NavigationCacheMode = NavigationCacheMode.Required;
}

找到简短的解构in MSDN here

警告:缓存和导航/激活/暂停是一个复杂的主题,我建议您阅读它。