2016-05-23 7 views
1

私はMvvmCrossを使って自分のUWPアプリケーションを構築しています。私は自分のビューモデルでビューを持っています。 アプリを起動すると、設定ビューから初めてShowViewModel<PasscodeViewModel>()を使用してパスコードビューにナビゲートします。次に、ビューモデルとビューコンストラクタを呼び出して、ビューを構築して初期化します。ユーザーが設定ビューに戻り、ShowViewModel<PasscodeViewModel>()のような同じメソッドを使用してパスコードビューに再度移動すると、この時間ビューとビューモデルコンストラクタは呼び出されません。パスコードビューを再初期化できないため。したがって、パスコードビューの前のインスタンスが表示されます。UWPでpage/viewmodelを再インスタンス化する方法は?

次のソリューション私はナビゲーションでbackstackを削除しようとしたが、その後もコールを取得するコンストラクタない

を試してみました。

また、ロードされたイベントを実装しますが、この解決法も私のためには機能しません。

ビューモデルでVoid Init()も実装されていますが、このメソッドも呼び出されません。

私はPasscodeViewとPasscodeViewModelのコンストラクタを呼び出すたびにPasscodeViewにナビゲートするだけです。

私の質問は、ナビゲーション中にページとビューモデルを毎回再初期化する方法です。 この問題の解決にお手伝いください。

+0

この問題を再現できるプロジェクトやサンプルコードを調査のために共有できますか? –

答えて

1

ユニバーサルWindows Phoneアプリのページナビゲーションキャッシュモードを「無効」に設定しました。私はそのデフォルト値が "必須"だと思う。

public PasscodeView() 
    { 
     InitializeComponent();   
     NavigationCacheMode = NavigationCacheMode.Disabled; 
    } 

上記のコードは私の仕事です。

+0

NavigationCacheModeを無効にすることは、この問題の一般的な修正ではないと思います。必須は頻繁に必要なので、デフォルトです。 OnNavigatedToイベントで初期化する必要があるコードから、コンストラクタで初期化する必要があるコードを分離する必要があります。後者のイベントは毎回呼び出されます。 NavigationMode、backまたはNavigationMode.Newを検出するには、そのイベントのNavigationModeもチェックしてください。 – ezaspi

+0

@ezaspi NavigationCacheModeで動作する私の答えを見てください=必要です –

2

ナビゲーションキャッシュモードを使用する必要がありましたが必要ですです。

非常にきれいでないソリューションでinitを再度呼び出すことで解決しました。

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    if (this.ViewModel!= null && e.NavigationMode != NavigationMode.Back) 
    { 
     var reqData = (string)e.Parameter; 
     var converter = Mvx.Resolve<IMvxNavigationSerializer>(); 
     var req = converter.Serializer.DeserializeObject<MvxViewModelRequest>(reqData); 
     this.Vm.CallBundleMethods("Init", new MvxBundle(req.ParameterValues)); 
    } 

    base.OnNavigatedTo(e); 
} 

このコードは背中のナビゲーションで再度のinitを呼び出すことが避けられます。

+0

これは^^^ THIS ^^^が動作することを確認しました。 – SuperJMN

関連する問題