2012-04-23 14 views
0

私のアプリの基本的なナビゲーション機能は、リストボックスから項目を選択し、選択された項目を決定し、そのid値を取得することから成ります。 idの値を次のページに渡し、新しいデータをプルダウンするWebクライアントで使用するためにapi urlに追加します。ここに私が今持っているものがあります。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)); 
     } 
    } 

私は、前のページからURLを取得するためにOnNavigatedTo使用することができますが、私がこだわっている部分は、WebクライアントにそのURLを差し込むています。

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

ウリのこの部分は変更されますか?"http://api.beatport.com/catalog/3/beatport/genre?id="?そうでない場合は、GenrePageにすべてを渡す代わりに、クエリ文字列にdata.idを渡すことを検討してください。その後、リンク先ページにUriを作成します。 GenrePage.xaml.csで

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)); 

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

関連する問題