2012-04-23 156 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