2016-03-29 7 views
0

私は現在、WinRTアプリケーションを構築していますが、私はこの問題に直面しています。SourcePageTypeをPageとしてキャストするにはどうすればよいですか?

私が達成しようとしているのは、前のページのプロパティを読んだり変更したりする必要があるということです。

私はMainPageWatchPageという2つのページがあるとします。

私はどのように私はこれを達成することができます... MainPageと私は、ナビゲーションパラメータを使用せずにMainPage内のプロパティにアクセスする必要がWatchPage'sOnNavigatedToイベント内からWatchPage

をナビゲートするのですか?私は、静的プロパティとメソッドを持つ静的クラスを作成することをお勧めしたい

protected override void OnNavigatedTo(NavigationEventArgs e){ 
    Type LastPage = rootFrame.BackStack.Last().SourcePageType; 

    if(LastPage == typeof(MainPage){ 
     // here, for example, say that MainPage has a property called isLoadSuccess 
     // I need to set that property to false 
     // or call a method from MainPage 
     // => this is not working MainPage MP = LastPage as MainPage; 
     // I know that it should not work anyway, but, how can I achieve this? 
    } 
} 
+0

メインページのOnNavigatedFromイベントで行うことができます。 – Archana

+0

@Archanaはい私は知っていますが、MainPageからいくつかのメソッドを呼びたい場合はどうすればいいですか? –

+0

あなたはそのイベントの権利を呼び出すことができます。何の問題? – Archana

答えて

1

は、既存のフレームワークを使用して達成することはできません。つまり、前のページのインスタンスへの参照がBackStackに存在しません。存在する唯一のことは、正直なところ、インスタンスを再作成するためのレシピです。つまり、BackStackには型とパラメータが含まれています。これらの2つの要素を使用すると、ユーザーがフレーム内でそのクラスに戻るときにクラスを再インスタンス化することができます。ちなみに、これらの成分には、タイプとシリアル化可能なパラメータが含まれています。シリアル化可能なパラメータのみを使用すると、アプリケーションがBackStackをNavigationStateに保存し、アプリケーションを中断/終了すると確実に復元できます。

これはあなたの問題の話です。私は正直言っていくつかの解決策を見ています。私はどちらも受け入れ可能だと思います。

最初の注意点は、NavigationCacheMode = Enabledを使用する必要があることです。これがなければ、あなたのページ(前のページを含む)は、戻るを含むすべてのナビゲーションで再作成されます。これはUWPの重要な動作です。これは、全体のフットプリントを節約するためにページがメモリから削除されていることを前提としているためです。 NavigationCacheModeを設定すると、それが上書きされます。

  1. は、これは簡単に十分な権利である

静的参照を作成しますか?このような何か:

public readonly static MainPage Instance; 
public MainPage() { 
    Instance = this; 
} 

それはお互いへの参照を持っているあなたの意見を必要とするため、これに注意してください。これはかなり最小限のリスク、IMHOです。

  • 基準これは、このような移動(パラメータ)を用いて達成するのが最も容易である
  • を渡します。

    // MainPage 
    public void GoAway() { 
        this.Frame.Navigate(typeof(SecondPage), this); 
    } 
    
    // SecondPage 
    MainPage MainPage; 
    public void OnNavigatedTo(object parameter) { 
        MainPage = parameter as MainPage; 
    } 
    

    それをシリアル化することができない何かを渡す必要がありますので、このに注意してください。時には、これは容認されます。

    これらの意味はありますか?

    幸運のベスト。

    +0

    この美しい答えをありがとう。私は 'NavigationParameters'という静的クラスを作成し、ページ全体を設定するのではなく、別のページで使用する参照とインスタンスにプロパティを設定しました。私はそれが将来的には何の問題も起こさないことを願っています。 –

    0

    ..私は何を達成しようとすることは良い習慣だとは思わない...代わりに、ここに私の例です:

    public static class Shared 
        { 
         public static string property = "something.."; 
    
         public static async Task<bool> Method() 
         { 
          await Task.Delay(400); 
          return false; 
         } 
        } 
    

    その後、あなたは任意の場所からプロパティを取得または設定し、メソッドを呼び出すことができます。あなたがしようとしている何

    bool result = await Shared.Method(); 
    
    関連する問題