簡體   English   中英

WP7在頁面之間傳遞數據

[英]WP7 Passing data between pages

我的應用程序的基本導航功能包括從列表框中選擇一個項目,確定選擇了哪個項目並獲取其id值。 id值傳遞到下一頁,並將其添加到api網址中,以供網絡客戶端使用以提取新數據。 這就是我現在所擁有的。

確定選擇的項目並導航到第二頁。

    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插入到webclient中。

    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框架。 那會是解決這個問題的更好方法嗎? 如果是這樣,那將如何工作? 謝謝您的幫助。

Uri "http://api.beatport.com/catalog/3/beatport/genre?id="這一部分是否有變化? 如果不是這樣, GenrePage整個內容傳遞給GenrePage ,而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將適當的轉義字符插入查詢字符串。 查詢字符串將自動在目標頁面上轉義,因此您無需在此進行任何特殊操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM