0

独自のオブジェクトがあり、別の Windows Phone ページでそのオブジェクトのリストを表示する必要があります。これは、他のページに移動するためのこれまでのコードです。他のページのリストボックスに車の所有者のリストをリストする必要があります

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

currentCar.Owners は、基本的にその指定された車のリストです (どのタイプの車か)

ありがとうございました

4

3 に答える 3

1

ページとの間でオブジェクトを渡す別の方法があります。wp7ツールキットからこのトリックに気付きました。DatePicker コントロールも同様に機能します。これがトリックです。

以下を使用してルート フレームを取得できます。

var frame = Application.Current.RootVisual as PhoneApplicationFrame

次に、次を使用して別のページに移動できます。

frame.Navigate(someUri)

重要なポイントは、frame.Navigated のハンドラーを登録することです。

frame.Navigated += OnFrameNavigated;

そして、次のように、ナビゲートされたページに任意の値を渡すことができます。

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

それは簡単です!

于 2012-06-06T13:51:03.107 に答える
0

そのように NavigationService.Navigate を介してオブジェクトを渡すことはできません。これは URL のように動作します。

必要な情報をクエリ文字列に追加し、それを OnNavigatedTo 関数で読み取り、値を使用して必要なデータを生成する必要があります。

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)); 
} 

移動先のページ内:

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); 
}

上記のコードはテストされていません。要点を理解するために作成したものです。いつでもリストを反復処理し、クエリ文字列に完全なデータセットを追加して、他のオブジェクトにプッシュすることができます側。

より良い例として、Shai Raiten が次のブログ投稿でどのようにそれを行っているかを見てください。

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

于 2012-04-19T13:16:50.097 に答える
0

これを機能させる 1 つの方法は、 を受け取り、それをリスト内の値がカンマで区切られた単一の文字列に変換するToCSV()関数を作成することです。List<String>次に、次のように呼び出すことができます。

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

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

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

于 2012-04-19T13:17:04.443 に答える