ユーザー入力を要求し、その入力に基づいて一連の画鋲を生成する Windows ストア アプリを作成しています。画鋲をタップすると、アプリはより詳細なページに移動します。
今私が抱えている問題は次のとおりです。私のページはすべて自動的に生成された LayoutAwarePage から継承されるため、SaveState と LoadState を使用して画鋲を保存し、ナビゲーションで消去されないようにすることができます。問題は、SaveState によって提供される Dictionary オブジェクトに保存するピンを取得できないことです。
私が得るエラーは「Value cannot be null」で、LayoutAwarePage.OnNavigatedFrom() の _pageKey 変数を参照していますが、なぜそれが起こっているのかわかりません。
LoadState で逆シリアル化できるように JSON 文字列にシリアル化しようとしましたが、文字列または UIelement のリストを使用して同じ結果が得られます。
これはすべて、SaveState、LayoutAwarePAge、および SuspensionManager がどのように機能するかを理解していないことが原因だと思います。ディクショナリは文字列とオブジェクトのみを要求しているため、私がしていたことはうまくいくと思いました。
私は LayoutAwarePage の他のメソッドを使用していないので、SaveState と LoadState を使用するよりも良い方法があれば、私はすべて耳にします。
これらは、私が試した SaveState の 2 つのバージョンです。
JSON の使用
protected override void SaveState(Dictionary<String, Object> pageState)
{
List<string> pindata = new List<string>();
List<string> serialisedpins = new List<string>();
foreach (Pushpin ele in map.Children)
{
pindata = ele.Tag as List<string>;
serialisedpins.Add(JsonConvert.SerializeObject(pindata));
}
string jasoned = JsonConvert.SerializeObject(serialisedpins);
pageState["pins"] = jasoned;
}
UIElement のリストを使用する
protected override void SaveState(Dictionary<String, Object> pageState)
{
List<UIElement> pins = new List<UIElement>(map.Children);
pageState["pins"] = pins;
}