2015-03-12 4 views
1

Я создаю приложение WindowsPhone и (на данный момент) У меня есть три страницы. Страница1, стр. 2 и стр. 3. Page1 имеет два (2) текстовых поля, которые принимают кулак и фамилию, txtFN и txtLN и кнопку. Кнопка приведет вас к форме2, которая запрашивает у вас псевдоним. У этого есть одно текстовое поле и кнопка. Когда пользователь нажимает кнопку, он принимает форму form3 с текстовым блоком. Прозвище пользователя вводит в form2, отображается в form3, на текстовом блоке. Я правильно понял эту часть. Теперь я пытаюсь сделать это: если пользователь ничего не вводит в разделе имен ников, я хотел бы показать первое имя в форме три. Вот мой код form2-> form3 события:Передача данных между несколькими формами

в form2:

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, если нет пользователя inpu т.

+0

возможно дубликат [Как передать объект из кадра в другой кадр в Windows 8 Style App] (http://stackoverflow.com/questions/13890836/how-to-pass-an-object-from-a-frame-to-another-frame-in-a-windows-8-style-app) – BCdotWEB

+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() для достижения той же функциональности, но она включает в себя больше работ:

В Page1:

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

Убедитесь, что у в Page2 в string FirstName {get;set;}. Теперь используйте тот же метод для отправки переменной на страницу. Затем вы можете использовать переменную FirstName в Page3.

Излишне говорить, что первый способ проще.

+0

Это снова сработало как шарм! Спасибо тонну :) –

+0

Отредактированный ответ, чтобы добавить альтернативный метод достижения того же. –

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

Привет, я дам это попробовать, но я не понял, почему мы не можем использовать OnNavigatedTo (NavigationEventArgs e) o.O –

Смежные вопросы