2012-04-19 4 views
0

私は自分のオブジェクトを持っているので、別のウィンドウの電話ページでそのオブジェクトのリストを表示する必要があります。これは、これまで私の他のページに移動するためのコードです。私は他のページにリストボックスに自分のオブジェクトをナビゲーションWindows Phone 7(silverlight)に渡す

 private void btnOwners_Click(object sender, RoutedEventArgs e) 
     { 
      NavigationService.Navigate(new Uri 
        ("/ViewCarMembers.xaml?info=" + 
         currentCar.Owners, UriKind.Relative)); 
     } 

currentCar.Ownersを車の所有者のリストを一覧表示する必要があり、基本的にその指定された車の一覧です

答えて

0
いただきありがとうございます(型車ののもの)

このようにNavigationService.Navigateでオブジェクトを渡すことはできません。URLのように動作します。あなたがナビゲートしているページで

private void btnOwners_Click(object sender, RoutedEventArgs e) 
{ 
     NavigationService.Navigate(new Uri("/ViewCarMembers.xaml?owners=1,2,3,4,5,6,7,8,9",UriKind.Relative)); 
} 

ザ・:

はあなたが必要とするデータを生成するために、クエリ文字列に必要な情報を追加OnNavigatedTo機能でそれを読むと値を使用する必要があります。上記のコードはテストされていない

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
{ 
    var data = this.NavigationContext.QueryString; 

    if (data.ContainsKey("owners")) 
    { 
     //Iterate through values (comma seperated) 
     //Populate a new list with the owners. 
    } 

    base.OnNavigatedTo(e); 
} 

は、それは私は全体のポイントを取得するために作られてきただけで何かです - あなたは常にそれを押して、完全なデータセットをあなたのリストを反復処理し、クエリ文字列に追加することができもう一方のオブジェクトに戻します。 List<String>を取り、それを変換しToCSV()関数を作成することです。この作品を作るために

http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/01/wp7-data-between-pages-part-1.aspx

+0

コードの最初のセクションでは、数字をちょっと説明してください。 – user1290653

+0

数字は一意のリファレンス(またはID)の単なる例でした。あなたのコレクションにユニークなプロパティがあった場合は、代わりにそのプロパティを使用できます。これにより、次のページに移動し、必要に応じてリストを作成するときに値を取得できます。 –

0

一つの方法:より良い例

はシャイRaitenには、次のブログ記事でそれをしない方法を見てリスト内の値がコンマで区切られた単一の文字列に変換します。次のようにあなたはそれを呼び出すことができます。

private void btnOwners_Click(object sender, RoutedEventArgs e) 
{ 
    NavigationService.Navigate(new Uri 
    ("/ViewCarMembers.xaml?info=" + 
     ToCSV(currentCar.Owners), UriKind.Relative)); 
} 

ToCSV()機能は、適切なエスケープ文字を挿入するために、出力文字列にapeending前に、すべての所有者名の上にUri.EscapeDataStringを呼び出す必要があります。文字列は自動的にエスケープされないので、ViewCarMembersページ内で何もする必要はありません。また、CSVリストを解析して宛先ページで使用する関数を作成する必要があります。

より良い解決策は、すべての所有者の名前ではなく、指定された車の名前を渡して、宛先ページにViewModelから所有者のリストを取得させることです。

+0

私はより良い解決策をどうすればいいですか – user1290653

+0

彼はMVVMを使用しているとは指定していないようです。 –

+0

@ user1290653Prætorianの他の解決策に興味がある場合は、例として試してみてください。 –

1

オブジェクトをページに/から渡す別の方法があります。 私はwp7ツールキットからこのトリックに気付きました。 DatePickerコントロールは同じように機能します。 ここでのトリックです。

あなたは使用して、ルートフレームを得ることができます。

var frame = Application.Current.RootVisual as PhoneApplicationFrame 

を次にあなたが使用して別のページに移動することができます

frame.Navigate(someUri) 

をし、キー瞬間は、フレームのためのあなたのハンドラを登録することです。ナビゲート:

frame.Navigated += OnFrameNavigated; 

そして、あなたはそのようなあなたのナビゲートページに任意の値を渡すことができます:

private void OnFrameNavigated(object sender, NavigationEventArgs e) 
    { 
     var myPage = e.Content as IMyPage; 
     myPage.MyObject = new MyObject(); 
    } 

それは簡単です!

関連する問題