在多个表单之间传递数据
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.";
}
}
我正在创建一个 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.
不用说了,第一种方法更简单
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.";
}
}