2

別のページに移動するときに、オブジェクトのリストを別のページで使用できるようにするにはどうすればよいですか。

たとえば、私のmainpage.xaml

var data2 = from query in document.Descendants("weather")
           select new Forecast
           {
                date = (string)query.Element("date"),
                tempMaxC = (string)query.Element("tempMaxC"),
                tempMinC = (string)query.Element("tempMinC"),
                weatherIconUrl = (string)query.Element("weatherIconUrl"),
            };

forecasts = data2.ToList<Forecast>();
....
NavigationService.Navigate(new Uri("/WeatherInfoPage.xaml", UriKind.Relative));

そして、他のクラスで、このように使用できるように利用できるようにしたい

private void AddPageItem(List<Forecast> forecasts)
{
    ..
}
4

4 に答える 4

4

これはあなたを助けるかもしれません

//PhoneApplicationService.Current.State を使用してリストを保存します//

PhoneApplicationService.Current.State["yourparam"] = lstpro.SelectedItems; NavigationService.Navigate(new Uri("/res.xaml", UriKind.Relative))

そして2ページ目に

プライベート IList iList1;

// onNavigatedTo イベントで、格納されたリストを変数に割り当てます//

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

{
     var i= PhoneApplicationService.Current.State["yourparam"];

     //convert object to list//
     iList1 = (IList) i ; 
     lstpro.ItemsSource = iList1;

}
于 2013-10-20T16:24:48.730 に答える
1

App.xaml.cs に配置するグローバル変数を使用できます。

//In App.xaml.cs
public static List<Forecast> SelectedForecasts = null;

変数は、アプリケーション全体で使用できます。

于 2013-10-20T16:39:40.963 に答える
1

一般に、 Singletonパターンで実装された追加のクラスを使用します。このクラスでは、ページ間で交換する必要があるすべてのデータを保存します。基本的には、Jon が述べたのと同じアプローチですが、App.xaml.cs をきれいに保つのが好きです。そのため、アプリケーションのどこからでもデータにアクセスできます。

于 2013-10-20T22:03:00.243 に答える
0

これを実現する方法はいくつかありますが、真にエレガントな方法はありません。主な問題は、廃棄シナリオを処理することです。完全に復元するには、アプリが再アクティブ化されたばかりの場合でも、ページが入力リストを取得できる必要があります (以前のナビゲーションからの以前の状態はすべて消去されています...)

  • 独自のカスタム形式でリストをシリアル化し、それを Uri の末尾に追加できます。欠点は、Uri を自分で解析して逆シリアル化する必要があることです (たとえば、id のような単純で少量のデータの場合、この方法の方が自然に見えるかもしれません)。

次のページに移動するには:

NavigationService.Navigate(new Uri("/WeatherInfoPage.xaml?data1;data2;serializeddata", UriKind.Relative));

次のページでデータを取得するには、現在の Uri からデータを解析して逆シリアル化する必要があります。

 Uri currentUri = ((App)Application.Current).RootFrame.CurrentSource;
  • 新しいページに移動して取得する前に、リストをAppSettingsまたはPhoneApplicationService.Current.Stateにある専用の変数に保存することもできます。おそらく、この仕事を行うための専用クラスを作成するのは面白いかもしれません。パラメータのプッシュと取得、パラメータの一意性の確保、パラメータの有効期間の管理などを行うための集中的な場所になる可能性があります...最初の提案にも適用できます。

  • 最後に、リストがどこかに永続化されている場合 (ファイル、組み込みデータベース)、id を次のページに渡し (以前の提案を使用)、永続化されたソースからクエリを実行して対応するリストを取得できます。

どちらの場合も、リストを次のページに渡し、廃棄シナリオを処理できます。

于 2013-10-20T16:51:00.380 に答える