Windows ストア アプリのページ間で複雑なオブジェクトを渡す際の最善の方法は何ですか? MSDN では、セッション状態をシリアル化するために渡すことができるのは基本的なタイプのオブジェクトのみであると述べていますが、アプリの起動時にアプリがログアウトしてログイン資格情報を要求するだけなので、セッション状態をシリアル化するつもりはありません次回。ユーザーがログアウトまたは保存ボタンを押したときに、データをシリアル化する予定です。
3 に答える
Person オブジェクトを PersonDetailPage に渡すとします。次に、MainPage (またはその他のページ) に表示される内容を次に示します。
GridView を使用していると仮定すると、次のようになります。
this.Frame.Navigate(typeof(PersonDetailPage), (Person)e.ClickedItem);
次に、PersonDetailPage の LoadState() で、パラメーターが渡されたかどうかを確認し、そのパラメーターを変数に関連付けます。
protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
if (navigationParameter != null)
{
person = (Person)navigationParameter;
}
}
複雑なオブジェクトをシリアル化し、それを文字列として渡し、2 ページ目で文字列を逆シリアル化できます
セッション状態をシリアル化しないと、ユーザーのエクスペリエンスが最適でなくなる可能性があります。ユーザーがログアウトしたときの状態のみを保存すると、アプリケーションがサスペンドし、リソース不足のために OS によって終了されたときに状態が失われます。
アプリケーションのライフサイクルを見てみましょう。ユーザーが別のアプリケーションに切り替え、アプリケーションが前面に出なくなるとすぐに、アプリケーションは中断されます。これが、状態を保存して保持する最後の機会です。ユーザーが元に戻すまでアプリケーションをメモリ内に残すことはできますが、リソースが必要な場合に OS によってアプリケーションがシャットダウンされることもあります。この場合、ユーザーは再起動する必要があります。アプリケーションが中断されたときに状態を保存しないと、状態が失われ、ユーザー エクスペリエンスが損なわれます。
状態を保存する独自の方法を思い付くことができるかもしれませんが、Windows ランタイムでサポートされているページ間で基本型のみを渡すことをお勧めします。このようにして、ほとんどの作業を処理するアプリケーション テンプレートに含まれるSuspensionManagerを利用できます。ページ間で基本型のみを渡すことはそれほど難しくありません。オブジェクト ID (ある種の一意の識別子) のみを渡し、すべてのページからアクセスできる別の場所にオブジェクトを保持することをお勧めします。または、オブジェクトをシリアライズ可能にして、シリアライズされた文字列 (XML または JSON) として渡すこともできます。