トップ回答者
LoadState()メソッドのpageStateに付いて

質問
回答
-
Kpbe-MMさん
coelacanthと申します。
ページ遷移して戻った際などはnull以外が渡されます。
CommonディレクトリのLayoutAwarePage.csにその辺の仕組みが記述してありますので目を通してみると良いと思います。
以下の部分です。
var frameState = SuspensionManager.SessionStateForFrame(this.Frame);
this._pageKey = "Page-" + this.Frame.BackStackDepth;
if (e.NavigationMode == NavigationMode.New)
{
// 新しいページをナビゲーション スタックに追加するとき、次に進むナビゲーションの
// 既存の状態をクリアします
var nextPageKey = this._pageKey;
int nextPageIndex = this.Frame.BackStackDepth;
while (frameState.Remove(nextPageKey))
{
nextPageIndex++;
nextPageKey = "Page-" + nextPageIndex;
}
// ナビゲーション パラメーターを新しいページに渡します
this.LoadState(e.Parameter, null);
}
else
{
// ナビゲーション パラメーターおよび保存されたページの状態をページに渡します。
// このとき、中断状態の読み込みや、キャッシュから破棄されたページの再作成と同じ対策を
// 使用します
this.LoadState(e.Parameter, (Dictionary<String, Object>)frameState[this._pageKey]);
}また、SaveSateなどの挙動も同様にLayoutAwarePage.csのOnNavigatedFromやOnNavigatedToで行っている処理が参考になります。
すべての返信
-
Kpbe-MMさん
coelacanthと申します。
ページ遷移して戻った際などはnull以外が渡されます。
CommonディレクトリのLayoutAwarePage.csにその辺の仕組みが記述してありますので目を通してみると良いと思います。
以下の部分です。
var frameState = SuspensionManager.SessionStateForFrame(this.Frame);
this._pageKey = "Page-" + this.Frame.BackStackDepth;
if (e.NavigationMode == NavigationMode.New)
{
// 新しいページをナビゲーション スタックに追加するとき、次に進むナビゲーションの
// 既存の状態をクリアします
var nextPageKey = this._pageKey;
int nextPageIndex = this.Frame.BackStackDepth;
while (frameState.Remove(nextPageKey))
{
nextPageIndex++;
nextPageKey = "Page-" + nextPageIndex;
}
// ナビゲーション パラメーターを新しいページに渡します
this.LoadState(e.Parameter, null);
}
else
{
// ナビゲーション パラメーターおよび保存されたページの状態をページに渡します。
// このとき、中断状態の読み込みや、キャッシュから破棄されたページの再作成と同じ対策を
// 使用します
this.LoadState(e.Parameter, (Dictionary<String, Object>)frameState[this._pageKey]);
}また、SaveSateなどの挙動も同様にLayoutAwarePage.csのOnNavigatedFromやOnNavigatedToで行っている処理が参考になります。