0

我的应用程序的基本导航功能包括从列表框中选择一个项目,确定选择了什么项目并获取它的id值。将id值传递到下一页并将其添加到 api url 以在 webclient 中使用以提取新数据。这就是我现在所拥有的。

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

    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 框架的内容。这会是更好的处理方法吗?如果是这样,那将如何工作?谢谢您的帮助。

4

1 回答 1

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将在查询字符串中插入适当的转义字符。查询字符串在目标页面上自动取消转义,因此您无需在此处执行任何特殊操作。

于 2012-04-23T01:28:10.050 回答