2012-04-23 154 views
0

我的应用程序的基本导航功能包括从列表框中选择一个项目,确定选择了哪个项目并获取其值id值。将id值传递到下一页,并将其添加到api网址,以便在Web客户端中使用以下拉新数据。这是我现在拥有的。WP7在页面间传递数据

确定所选项目并导航到辅助页面。

public void genreSelectedHandler(object sender, RoutedEventArgs e) 
    { 
     ResultGenre data = (sender as TextBlock).DataContext as ResultGenre; 
     ListBoxItem pressedItem = this.listGenres.ItemContainerGenerator.ContainerFromItem(data) as ListBoxItem; 
     if (pressedItem != null) 
     { 
      string genreID = "http://api.beatport.com/catalog/3/beatport/genre?id=" + data.id; 

      this.NavigationService.Navigate(new Uri("/Pages/GenrePage.xaml?genreID=" + genreID, UriKind.Relative)); 
     } 
    } 

在次级页面,我可以使用的OnNavigatedTo摆脱前一个页面的URL,但我卡上堵塞该URL到Web客户端的一部分。

public GenrePage() 
    { 
     InitializeComponent(); 

     // WebClient jsonRelease 
     WebClient jsonGenres = new WebClient(); 
     Uri apiGenre = new Uri("URL from previous page goes here"); 
     jsonGenres.DownloadStringCompleted += new DownloadStringCompletedEventHandler(jsonGenres_GetDataCompleted); 
     jsonGenres.DownloadStringAsync(apiGenre); 

    } 

    // Textblock data from main page 
    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     string genreID = ""; 
     if (NavigationContext.QueryString.TryGetValue("genreID", out genreID)) 

     base.OnNavigatedTo(e); 
    } 

似乎我唯一能做的就是将url添加到辅助页面上的现有控件。有没有更好的方法来完成我想要做的事情?我读了一点MVVM框架。这是处理这个问题的更好方法吗?如果是这样会如何工作?谢谢您的帮助。

回答

0

这个部分的Uri "http://api.beatport.com/catalog/3/beatport/genre?id="是否有变化?如果不是,则不要将整个事件传递到GenrePage,只考虑在查询字符串中传递data.id。然后在目标页面上创建Uri。

如果你必须这样做,你在你的代码片段所展示的方式,请执行下列操作:

string genreID = @"http://api.beatport.com/catalog/3/beatport/genre?id=" + data.id; 
this.NavigationService.Navigate(new Uri("/Pages/GenrePage.xaml?genreID=" + 
    Uri.EscapeDataString(genreID), UriKind.Relative)); 

在GenrePage.xaml.cs

public partial class GenrePage : PhoneApplicationPage 
{ 
    public GenrePage() 
    { 
    InitializeComponent(); 
    } 

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

    string genreID = String.Empty; 
    if(NavigationContext.QueryString.TryGetValue("genreID", out genreID)) { 
     LaunchWebClient(genreID); 
    } 
    } 

    private void LaunchWebClient(string genreID) 
    { 
    WebClient jsonGenres = new WebClient(); 
    Uri apiGenre = new Uri(genreID); 

    jsonGenres.DownloadStringCompleted += new 
     DownloadStringCompletedEventHandler(jsonGenres_GetDataCompleted); 
    jsonGenres.DownloadStringAsync(apiGenre); 
    } 
} 

Uri.EscapeDataString将插入适当的转义字符到查询字符串中。查询字符串在目标页面上自动转义,所以您不需要在那里做任何特殊的事情。

+0

完美的工作。谢谢! – nos9 2012-04-23 02:21:21