1

Intense Templates(SplitView sample)を使ってUWPプロジェクトを開発していたのですが、Template10(Hamburger)に切り替えました。パラメータを渡そうとするとエラーが発生するようです

param is string with value something like this - (d5d05a3b-546a-4ca6-a345-74e333fa00fb) Frame.Navigate(typeof(EditPage),param);

エラーは次のようなものです: ErrorPicture そして、編集ページが正しいparamを取得できない場合、ユーザーを送り返します ( Frame.GoBack())、今は次のようなエラーが発生しています

An exception of type 'System.Runtime.InteropServices.COMException' occurred in App6.exe but was not handled in user code
Additional information: Error HRESULT E_FAIL has been returned from a call to a COM component.
4

1 に答える 1

1

問題の根本的な原因は、(例外文字列に基づいて) 推測した場合、シリアル化できない複雑な型をページに渡していることです。テンプレート 10 がパラメーターをシリアル化する理由は、アプリが中断された後にナビゲーション状態を正しく復元できるようにするためです。シリアル化できないオブジェクトを渡さなければならない場合、これは不便だと思います。そのため、BootStrapper.SessionState (ディクショナリ) を使用すると、あらゆる種類のオブジェクトを保持でき、SessionState を使用できるページにキーのみを渡す必要があることがわかります +そのキーを使用してオブジェクトを取得します。

ちなみに、これは素晴らしいパターンであり、テンプレート 10 に固有のものではありません。これに追加する唯一のことは、オブジェクトが辞書にないことを想定し、その状況を処理するための防御コードを含めることです。その理由は、アプリが一時停止されている場合に、この状況が発生する可能性があるためです。

これが理にかなっていることを願っています。そして、気分を悪くしないでください。この質問をするのはあなたが初めてではありません。

var key = nameof(MyObject);
SessionState.Add(key, MyObject);
NavigationService.Navigate(typeof(Views.MainPage), key);
于 2016-05-24T15:28:40.463 に答える