在多个表单之间传递数据

时间:2015-03-12 09:26:51

标签: c# visual-studio-2013 windows-phone-8-emulator

我正在创建一个WindowsPhone应用程序(目前)我有三个页面。第1页,第2页和第3页。 Page1有两(2)个文本框,可以接受名字和姓氏,txtFN和txtLN以及一个按钮。该按钮将您带到form2,它会询问您的昵称。那有一个文本框和一个按钮。当用户单击该按钮时,它将获取具有文本块的form3。用户在form2中输入的昵称显示在text3上的text3中。我得到了那个部分是正确的。现在,我试图这样做:如果用户没有在昵称部分输入任何内容,我想在表单3中显示第一个名字。这是我的form2-> form3事件的代码:

in form2:

private void Button_Click(object sender, RoutedEventArgs e)
{
    Frame.Navigate(typeof(Page4_phone_Number_extraction), "Alright " + Texbox_nickname_extraction.Text + "!");
}

in form3,

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    Textblock_nickname_display.Text = e.Parameter.ToString();
}

这就像一个魅力......

同样,对于我的生活,如果没有用户输入,我无法想到如何在form3中显示名字。

2 个答案:

答案 0 :(得分:1)

一种选择是将数据存储在本地应用设置中,例如:

Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
localSettings.Values["FirstName"] = txtFN.txt;
第1页

然后,您可以在第3页中将其解压缩为:

Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
Textblock_nickname_display.Text=localSettings.Values["FirstName"].ToString();

您也可以使用OnNavigatedFrom()来实现相同的功能,但它涉及更多工作:

在第1页:

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    Page2 destinationPage = e.Content as Page2;
    if (destinationPage != null)
    {
        destinationPage.FirstName = txtFN.Text;
    }
}

确保在Page2中有string FirstName {get;set;}。现在使用相同的方法将变量发送到Page3。然后,您可以在Page3中使用FirstName变量。

毋庸置疑,第一种方法更简单。

答案 1 :(得分:0)

Microsoft的文档contains an example表明您不应该像您一样使用OnNavigatedTo(NavigationEventArgs e)而是:

private void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
    string name = e.NavigationParameter as string;

    if (!string.IsNullOrWhiteSpace(name))
    {
        tb1.Text = "Hello, " + name;
    }
    else
    {
        tb1.Text = "Name is required.  Go back and enter a name.";
    }
}