WP7在页面之间传递多个数据

时间:2012-04-26 01:38:32

标签: c# windows-phone-7

在我的应用中,我正在构建自己的媒体播放器。当用户选择要播放的歌曲时,希望能够将链接传递给样本媒体以及与其关联的元数据(艺术家,曲目,专辑艺术等)。我所坚持的部分是如何将所有数据并将其传递到媒体播放器页面。这是我到目前为止所拥有的。

确定选择了哪个项目并将数据添加到查询字符串。

已更新

    public void musicSampleSelectedHandler(object sender, RoutedEventArgs e)
    {
        Track selected = (sender as Image).DataContext as Track;
        ListBoxItem pressedItem = this.listReleaseMain.ItemContainerGenerator.ContainerFromItem(selected) as ListBoxItem;
        if (pressedItem != null)
        {
            string _rT = selected.title;
            string _rN = selected.release.name;
            //string _rA = selected.artists; ????
            string _rI = selected.images.large.url;
            string _rS = selected.sampleUrl;

            this.NavigationService.Navigate(new Uri("/Pages/MediaPage.xaml?releaseName=" + _rN + "&releaseTrack=" + _rT + "&releaseImage=" + _rI
                + "&releaseSample=" + _rS, UriKind.Relative));
        }
    }

OnNavigatedTo方法从查询字符串中提取数据

        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        string releaseName = String.Empty;
        string releaseImg = String.Empty;
        string releaseUrl = String.Empty;

        if (NavigationContext.QueryString.TryGetValue("releaseUrl", out releaseUrl))
        {
            sampleMedia.Source = new Uri(releaseUrl, UriKind.Absolute);
        }
    }

我不确定我是否可以使用查询sting将多个片段传递给媒体播放器,或者我是否要做一些不同的事情来将数据传递到另一个页面。我的所有数据都来自使用webclient的网络。谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

QueryString只是通过Uri传入的参数的字典。 Uri使用传递&分隔的参数的标准语法。所以在你的例子中,如果你有类似的东西:

this.NavigationService.Navigate(new Uri("/Pages/MediaPage.xaml?releaseUrl=" + releaseUrl + "&releaseImg=" + releaseImg , UriKind.Relative)); 

然后你可以使用类似的东西解析它:

if (NavigationContext.QueryString.TryGetValue("releaseUrl", out releaseUrl))   
{   
    sampleMedia.Source = new Uri(releaseUrl, UriKind.Absolute);   
} 

if (NavigationContext.QueryString.TryGetValue("releaseImg", out releaseImg))   
{   
    // do something with releaseImg
}