0

我刚开始玩 WP7,我可能很容易遇到问题。在我的应用程序中,我正在浏览页面并同时发送字符串。以及问题的根源。我在这个页面上:

namespace Zakupy
{
    public partial class List : PhoneApplicationPage
    {


        public List()
        {
            InitializeComponent();

        }



        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);


            string msg = "";
            string lister = "";
            string sklad = "";


              if (NavigationContext.QueryString.TryGetValue("msg", out msg))
                {
                    string name = "";
                    name = msg;
                    PageTitle.Text = name;
                }

            if (NavigationContext.QueryString.TryGetValue("add", out lister))
            {
                sklad = lister;
                listBox1.Items.Add(sklad);
            }

        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.Navigate(new Uri("/AddList.xaml", UriKind.Relative));
        }


    }
}

从另一个页面导航。从那个页面我发送页面标题并设置它。到目前为止,它的工作正常。接下来我导航到下一页我将项目添加到列表框。在导航回到上面的页面时,我遇到了 2 个问题: 1. 页面标题正在重置。2. 列表框中的上一项被当前发送的一项替换> 我可能遗漏了一些非常简单的东西,但感谢您的帮助。

4

2 回答 2

0

OnNavigatedTo 总是在您的应用程序导航到它时调用,从 NavigationService 或当您点击“返回”按钮时。

您是否尝试测试您是否正在导航回来查看您的 QueryString 包含的内容,也许这包含您不想显示的数据。如果您在 NavigationEventArgs e 的属性中导航回来,您可以进行测试。

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);
        if (e.NavigationMode == System.Windows.Navigation.NavigationMode.Back)
        ...
    }
于 2013-01-13T22:42:28.827 回答
0

好吧,我误会了。每次导航到页面时,都会创建一个新的页面实例(尝试在构造函数中放置断点)。

如果要跨页面保存数据,可以将数据存储在 app.cs 文件中。这仅创建一次,并且可在应用程序的整个生命周期内的所有页面中使用。

在您的 App.cs 文件中

 public partial class App: Application
 {
     public List <string> myList = new List <string> ();
     ...

在您的 OnNavigationTo 处理程序中(仅显示用于处理列表)

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        if (e.NavigationMode != System.Windows.Navigation.NavigationMode.Back)
        {

            if (NavigationContext.QueryString.TryGetValue("add", out lister))
            {
                sklad = lister;
                ((App)Application.Current).myList.Add(sklad);
            }

            listBox1.ItemSource = ((App)Application.Current).myList;
        }
    }
于 2013-01-14T08:47:45.463 回答