在多个表单之间传递数据

Passing data between multiple forms

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

形式 2:

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

在 form3 中,

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

这很有魅力..

同样,对于我来说,如果没有用户输入,我想不出如何在 form3 中显示名字。

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

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;
    }
}

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

中使用 FirstName 变量

不用说了,第一种方法更简单

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.";
    }
}