Storing and getting data in windows phone app and using NavigationService.GoBack()

陌路散爱 提交于 2019-12-13 05:04:14

问题


I have created a Windows phone app based on a quiz game. I want that when the user give the correct answer for some question then a small tick mark will be permanently on in the tab of the question. I want to store score for every question so that i can display that in a place name as 'your score'. And that score will not be reset even if the app is closed.I have used IsolatedStorageFile to store the data for each page separately. In each page i have provided a back button which will navigate to category page using "NavigationService.GoBack()".

        //mainpage 
   using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using logic.Resources;
using System.IO;
using System.IO.IsolatedStorage;

namespace logic
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();

            // Sample code to localize the ApplicationBar
            //BuildLocalizedApplicationBar();
          }




private void Button_Click(object sender, RoutedEventArgs e)
            {


                NavigationService.Navigate(new Uri("/logo.xaml", UriKind.Relative));


 //Obtain a virtual store for application
            IsolatedStorageFile fileStorage = IsolatedStorageFile.GetUserStoreForApplication();
            int y = 0;

            if (!fileStorage.FileExists("amazon.txt"))
            {
                //Create a new StreamWriter, to write the file to the specified location.
                StreamWriter fileWriter = new StreamWriter(new IsolatedStorageFileStream("amazon.txt", FileMode.OpenOrCreate, fileStorage));
                //Write the contents of our TextBox to the file.

                fileWriter.WriteLine(y);
                    //Close the StreamWriter.
                    fileWriter.Close();
                }
}

}
}

//category page

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using System.IO;
using System.IO.IsolatedStorage;

namespace logic
{
    public partial class logo : PhoneApplicationPage
    {


        public logo()
        {
            InitializeComponent();
            int x = 0;





            //Obtain a virtual store for application
            IsolatedStorageFile fileStorage = IsolatedStorageFile.GetUserStoreForApplication();
            //Create a new StreamReader
            StreamReader fileReader = null;

            if (fileStorage.FileExists("amazon.txt"))
            {
                //Read the file from the specified location.
                fileReader = new StreamReader(new IsolatedStorageFileStream("amazon.txt", FileMode.Open, fileStorage));
                //Read the contents of the file (the only line we created).
                string textFile = fileReader.ReadLine();
                x = Convert.ToInt32(textFile);
                //Write the contents of the file to the TextBlock on the page.
                fileReader.Close();

                if (x == 1)
                {


                    ama.Visibility = System.Windows.Visibility.Visible;

                }
            }
}

private void Image_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            NavigationService.Navigate(new Uri("/amazon.xaml", UriKind.Relative));




        }
}}

//question page

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Navigation;
    using Microsoft.Phone.Controls;
    using Microsoft.Phone.Shell;
    using System.IO;
    using System.IO.IsolatedStorage;

    namespace logic
    {
        public partial class amazon : PhoneApplicationPage
        {
            public amazon()
            {
                InitializeComponent();

            }





          //check the answer is correct or not  

            int count = 0;
            int x;
            private void b1_Click(object sender, RoutedEventArgs e)
            {


                if (tb1.Text.Length == 0 || tb2.Text.Length == 0 || tb3.Text.Length == 0 || tb4.Text.Length == 0 || tb5.Text.Length == 0 || tb6.Text.Length == 0)
                {


                }


                else
                {

                    Char s1, s2, s3, s4, s5, s6;

                    s1 = Char.ToUpper(tb1.Text[0]);
                    s2 = Char.ToUpper(tb2.Text[0]);
                    s3 = Char.ToUpper(tb3.Text[0]);
                    s4 = Char.ToUpper(tb4.Text[0]);
                    s5 = Char.ToUpper(tb5.Text[0]);
                    s6 = Char.ToUpper(tb6.Text[0]);

                    if (s1 == 'A' && s2 == 'M' && s3 == 'A' && s4 == 'Z' && s5 == 'O' && s6 == 'N')
                    {


                        //Obtain a virtual store for application
                        IsolatedStorageFile fileStorage = IsolatedStorageFile.GetUserStoreForApplication();

 //Create a new StreamReader
                        StreamReader fileReader = null;

                        //Read the file from the specified location.
                        fileReader = new StreamReader(new IsolatedStorageFileStream("amazon.txt", FileMode.Open, fileStorage));

 //Read the contents of the file (the only line we created).
                        string textFile = fileReader.ReadLine();
                        x = Convert.ToInt32(textFile);

 //Write the contents of the file to the TextBlock on the page.
                        fileReader.Close();

                        if (x == 0)
                        {
                            fileStorage.DeleteFile("amazon.txt");

                            //Create a new StreamWriter, to write the file to the specified location.
                            StreamWriter fileWriter = new StreamWriter(new IsolatedStorageFileStream("amazon.txt", FileMode.OpenOrCreate, fileStorage));


                            fileWriter.WriteLine("1");
                            //Close the StreamWriter.
                            fileWriter.Close();

                        }


                            ans.Text = "Correct!!!";

                    }

                    else
                    {
                     ans.Text = "\n\nINCORRECT";

                    }
                }

            }



         //reset the value   

            private void reset_Click(object sender, RoutedEventArgs e)
            {

                tb1.Text = "";
                tb2.Text = ""; tb3.Text = ""; tb4.Text = ""; tb5.Text = ""; tb6.Text = "";


            }

            private void Image_Tap(object sender, System.Windows.Input.GestureEventArgs e)
            {
                  NavigationService.GoBack();


            }







        }
    }

The problem is that when ever i gave the correct answer and press the back button which navigate to logo page the trick(named as "ama" in category code) do not show. But when again i navigate to mainpage then come back to category page the trick is shown. I want that when ever i give the correct answer and navigate back to category page using the back button provided in the app or back button of mobile the trick should be shown at that time only.


回答1:


According to your code. Your logic is in constructor of that class. Which is called once you navigate to it from main page and is not called again when you navigate back from question page. So, you are logically not executing any code when it navigates back, hence displaying the same view as it was.

To make it update, write your logic code in Page_Loaded event.



来源:https://stackoverflow.com/questions/23512033/storing-and-getting-data-in-windows-phone-app-and-using-navigationservice-goback

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!