如何根据选择创建动态页面?

时间:2012-03-08 20:26:35

标签: windows-phone-7 windows-phone-7.1 windows-phone

我正在尝试根据从主应用程序屏幕中选择的项目动态填充第二个全景页面。

在应用程序的第一个开始屏幕上,如果每个项目都带有文本,则会有一个列表框。如果用户点击具有文本“foobar”的项目,则应加载模板页面,并且模板页面的标题应设置为“foobar”,并且该第二全景页面应该知道其数据应该与“foobar”相关。

有没有这样做?

我目前将我的MainPage导航到新页面(DynamicPage.xaml)。发生ListBox_SelectionChanged事件时会触发此导航。我有DynampicPage.xaml绑定到TitleText变量的标题文本,该变量位于MainPage.xaml.cs中。但是,当我这样做时,DynamicPage.xaml的标题只被设置为我的titleText变量的初始化值,即使我在导航到页面之前更新了这个变量。

如果有人能提供一些帮助,我将非常感激,因为我只是WP7平台的初学者。谢谢!

1 个答案:

答案 0 :(得分:1)

如果TitleText属性是依赖项属性,或者您的MainPage正在实现INotifyPropertyChanged接口,那么您用于标题的绑定只会更新,因此您的类可以在其属性发生更改时通知UI。

http://windowsphonegeek.com/articles/All-about-Dependency-Properties-in-Silverlight-for-WP7

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.95).aspx

但我认为这不是实现这一目标的最佳方式。现在更好的方法是将数据存储在静态类中的某个位置,在主页面的构造函数中将这些数据加载到列表框中,当用户选择项目时,将用户导航到第二页,如下所示:

NavigationService.Navigate(new Uri("/DynamicPage.xaml?Item=" + selectedItem.Id, UriKind.Relative));

当您像这样导航时,会创建一个新的DynamicPage实例,并且在OnNavigatedTo方法中,您可以访问导航参数并使用所选数据填充页面。例如:

<controls:Panorama x:Name="MyPanorama" Title="TitleHere">...</controls:Panorama>

Item selectedItem = StaticData.GetItem(NavigationContext.QueryString["Item"]);
MyPanorama.Title = selectedItem.Name.ToUpper();
Description.Text = selectedItem.Description;

通过这种方式,您可以使用辅助磁贴和Toast通知直接指向应用程序中的特定内容。

如果你要理解导航,你一定要使用名为Model-View-ViewModel的模式,这种模式主要是通过绑定来解决这些问题,但请相信我,这可能是现在更简单的方法。

相关问题