3

リストページと編集ページの2つのページを持つWinRT「Windowsストア」アプリがあります。ユーザーがリストアイテムをクリックして、下部のアプリバーから[編集]を選択すると、そのアイテムが編集ページに渡されます。そこから必要なのは、2つの可能なユーザーアクションをサポートすることです。

  • ユーザーが[戻る]ボタン(上部のナビゲーション)を使用して戻る場合、変更されていないアイテムを呼び出し元のページに戻す必要があります。

  • ユーザーが(編集ページにある)提供された[保存]ボタンをクリックした場合、アイテムのさまざまなプロパティを更新し、データストアに保存して、変更したアイテムを呼び出し元のページに自動的に返します。

いずれにせよ、呼び出し元のページは、アイテムに加えられた変更がある場合は、その表示を更新する必要があります。私はこれのほとんどを行うことができますが、アイテムを呼び出し元のページに戻す方法がわかりません。どうすればこれを行うことができますか?

今後、アプリに他のページが追加されることに注意してください(メインの「リスト」ページからも呼び出されます)。特定の「子」ページからリストページに戻るときに、どのページから返されるかによってリストページの動作が異なるように調整する必要があります。(それが理にかなっていることを願っています...)。

ボーナス質問:バックナビゲーションイベントをキャプチャして、変更されたアイテムが保存されないことをユーザーに通知し、ナビゲーションアクションを続行、保存、続行、またはキャンセルするオプションをユーザーに提供したいと思います。それは可能ですか?

TIA

4

2 に答える 2

1

私が解決しようとしている問題に対して、このアプローチは間違っていると判断しました。子ページから親ページに値を返す特に良い方法は見つかりませんでした。

代わりに、私の問題は別のアプローチを可能にしました。アプリケーション内で追跡しているアイテムのマスター List<> があります。この List<> は、ローカル ストレージにシリアル化されます。子ページを呼び出すときに、既存のアイテム (編集用) または null インスタンス (追加用) を渡します。

子ページに到達したら、LoadState メソッドで渡されたアイテムを取得します。渡された項目が null の場合、作業インスタンスになる新しいインスタンスを作成します。

そこから、ユーザーが必要に応じてアイテムを編集できるようにします。ユーザーがアイテムを保存すると、マスター List<> がストレージから逆シリアル化されます。次に、新しい項目をマスター List<> に追加するか、List<> 内の既存の項目を置き換えます。次に、マスター List<> をストレージに再シリアル化し、既存のものを置き換えます。

ユーザーが呼び出し元 (親) ページに戻ると、LoadState メソッドのストレージから項目のマスター List<> を再取得し、ページを再作成します。既存のアイテムが更新された場合、または新しいアイテムが追加された場合、親ページは変更を正確に反映します。それが最終的に私が起こる必要があったすべてでした。

私が最初に求めていたことを行う方法があるかどうかはわかりませんが、この場合、少なくともそれを行う必要はないと判断しました。「戻る」イベントでナビゲーション スタック内の親ページにオブジェクトを渡す唯一の方法は、この別の方法または類似の方法である可能性があります。

于 2012-12-06T22:18:51.750 に答える