2012-04-23 6 views
0

내 앱의 기본 탐색 기능은 목록 상자에서 항목을 선택하고 어떤 항목이 선택되었는지를 결정하고 id 값을 얻는 것으로 구성됩니다. id 값을 다음 페이지로 전달하고 웹 클라이언트에서 사용할 새로운 API를 url에 추가하여 새 데이터를 가져옵니다. 여기에 내가 가진 것이있다.WP10 페이지간에 데이터 전달하기

선택한 항목을 결정하고 보조 페이지로 이동하십시오. 내가 이전 페이지에서 URL을 얻을 OnNavigatedTo 사용할 수있는 보조 페이지에서

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을 연결한다에 붙어 부분.

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

관련 문제