Хотел бы я ответить на ответ vjsrinath выше;это IMO лучший способ сделать это.Большое спасибо !!
Это, наверное, самая близкая вещь, которую я видел, к тому, как работает модель iOS, где с первой страницы вы назвали executeSegue (== NavigateTo).Затем вы получаете обратный вызов с именем prepareForSegue, который позволяет вам устанавливать переменные на целевой странице, устанавливать делегата (обычно на себя), что-то в этом роде.
Для прохождения сложных объектов он отбивает штаныпередача параметров в URL.
В качестве явного примера, скажем, я хочу передать строку версии моего приложения в поле About, которое находится в отдельном проекте:
В вызывающем классе:
private void About_Click(object sender, EventArgs e)
{
NavigationService.Navigate(new Uri("/Library;component/Pages/About.xaml", UriKind.Relative));
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
if (e.Content is About)
{
About page = e.Content as About;
if (page != null)
{
page.VersionString = App.VersionText;
}
}
base.OnNavigatedFrom(e);
}
В классе About:
public partial class About : PhoneApplicationPage
{
public string VersionString { get; set; }
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
versionTextBlock.Text = VersionString;
}
}
Конечно, это очень простой пример, но свойство, через которое вы проходите, может быть любым объектом, что делает его очень мощным.Конечно, он может включать в себя обратные вызовы, такие как «saveButtonPressed» и т. Д., Поэтому обработку сохранения можно выполнять в вызывающем классе, а не в представлении, что довольно неудобно для аккуратности кода.например,
page.OnSaveButtonPressed = this.SaveButtonPressedHandler; // Pass object to save as parameter