【问题标题】:How do I create a dynamic page based on a selection?如何根据选择创建动态页面?
【发布时间】:2012-03-09 15:54:44
【问题描述】:

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

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

有没有办法做到这一点?

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

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

【问题讨论】:

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


    【解决方案1】:

    仅当 TitleText 属性是依赖属性或 MainPage 正在实现 INotifyPropertyChanged 接口时,您用于标题的 Binding 才会更新,以便您的类可以在其属性之一发生更改时通知 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 的模式,该模式主要通过绑定解决这些问题,但相信我,这可能是目前更简单的方法。

    【讨论】:

    • 感谢您的回复。我可以使用 DynamicPage.xaml.cs 文件中的 OnNavigated 方法传入数据,但是如何更新在模拟器中呈现时显示在该页面上的标题?有没有办法直接从页面的 DynamicPage.xaml.cs 文件设置页面标题或 XAML 中定义的其他功能?我可以轻松地将标记 绑定到 DynamicPage.xaml.cs 中定义的变量吗?
    • 您可以通过 x:Name 属性中指定的名称访问 xaml 中定义的控件。我更新了我的答案以显示这一点。希望这会有所帮助!
    猜你喜欢
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    相关资源
    最近更新 更多