如何在 windows phone 应用程序 8.1 中使用先前调用的 Web 服务数据导航回页面?

how to navigate back page with previously called web service data in windows phone app 8.1?

我有一个windowsphone8.1的基础应用,是空白应用; 我想导航到我的上一页而不调用我之前调用过的网络服务。 是否有任何堆栈或任何历史方法可以让我轻松管理上一页。

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

此代码不适用于我的框架。因为它向我发送了应用程序启动的第一页...

完整代码

当然----------------第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));
        }

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

新答案

您没有取消注册您的 BackPressed 事件,但您仍然在每次加载页面时添加它们,因此它会被执行多次。

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

您还可以查看 NavigationHelper class theta 包含在 Visual Studio 模板中。


旧答案

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

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

找到简短描述 in MSDN here

警告:缓存和 navigation/activation/suspension 是一个复杂的主题,我建议阅读它。