必要な場合は、ページに移動するときに引数をページに渡しますが、必要ですか?これを行わずにどのページが Navigate() を呼び出したかを知る方法はありますか?
3 に答える
PreviousPageと呼ばれるApplicationオブジェクトに静的プロパティを保持します。すべてのページ(または基本クラス)のOnNavigatedFromイベントで、PreviousPageを「this」(現在のページ)に設定します。OnNavigatedToイベントでは、そのApplication.PreviousPageプロパティを確認し、適切と思われる方法で使用できます。これは、WindowsストアアプリケーションのフレームワークにFrame.BackStackプロパティがないため、前のページにアクセスするための最も効果的な方法です。
使用できますGetNavigationState
が、望ましくない副作用がいくつかあります (現在のページから離れて移動し、文字列は内部にあり、どのように変更されるか、または変更されないかについての保証はありません)。渡したほうがいいと思います。
このメソッドを呼び出すと、NavigationMode.Forward を使用して現在のページの Page.OnNavigatedFrom が呼び出されます。GetNavigationState は通常、アプリケーションが中断されているときに呼び出されるため、現在のページは別の場所に移動されます。
ノート:
これらのメソッドで使用されるシリアル化形式は、内部使用専用です。アプリは、それに依存関係を形成するべきではありません。さらに、この形式は、文字列、文字、数値、および GUID 型などの基本型のシリアル化のみをサポートします。
私はこの正確な問題に遭遇し、カレブの答えは非常に役に立ちました. 彼のソリューションをどのように使用したかを明確にするために、いくつかのコードを投稿したかっただけです。
免責事項私は C# に少し (非常に!) 慣れていません。これを行うためのより良い方法があると確信していますが、他の誰かがもう少し詳細を探している場合に備えて、出発点として提供したかったのです。
前のページの状態を保持するために、アプリケーションの名前空間にグローバル変数を作成しました。
public static class global_vals{
static object _previousPage;
public static object previousPage
{
get
{
return _previousPage;
}
set
{
_previousPage = value;
}
}
}
各ページの OnNavigatedFrom メソッドは次のようになります。
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
global_vals.previousPage = this;
}
OnNavigatedTo メソッドは、次のようにグローバル変数をチェックします。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (global_vals.previousPage.GetType().ToString() == "AppName.SomePage")
{
//do something
}
}