2011-01-22 6 views
1

午前2時に私の脳が見えないという明らかな答えがあることを願っています(私は、同じ問題を抱えている誰も見つけられないという事実に基づいています)。WP7 - ウィンドウの戻るボタンを押したときにバインディングが実行されないのはなぜですか?

私のWindows phone 7の "ハードウェア/内蔵"戻るボタンを押すと、私のバインディングのどれも再評価されません。例えば、私のMainPageでは、値が独立したストレージにあるかどうかをチェックする、ViewModelのboolプロパティにボタンの "IsEnabled"がバインドされています。エミュレータでは、ディスエーブルされます(明らかに)。次に、別のページに移動し、必要な値を独立したストレージに追加します。ハードウェアの戻るボタンを押して元のページに戻ると、バインディングは再評価されず、私のボタンは無効のままです。

navigateメソッドを使用してコード経由でMainPageに戻った場合、バインディングは再評価され、すべてが良好です。

理由は何ですか?

答えて

0

RaisePropertyChangedメソッドがMVVM Light ViewModelによって生成されていないような問題が発生します.ViewModelのIsEnabledプロパティのGet {}アクセサーを直接IsolatedStorageの値にバインドすると、ViewModel isn 'その根底にある価値が必然的に変化したことを知ります。

値をIsolatedStorageに書き込むと、MVVMのMessengerインターフェイスを使用して、モデルのRaisePropertyChanged()イベントを発生させる必要があることをViewModelに通知し、そのプロパティを再バインドします。あなたの意見

+0

基本的に私はRaisePropertyChangedを別のViewModelから必要なものに移動するため、試行していた最初のものでした。私はナビゲーションボタンが機能していたので、戻りませんでしたが、標準のMVVMライト実装のようにViewModelsを保持しないので、メッセージを受け取ることができないと想定しました。私はそれを試してみようとあなたに知らせる – Nogusta

+0

それは働いたが、それは私に多くの質問を残す。コードを介してビューにナビゲートすると、ViewModelのコンストラクタが呼び出されますが、戻るボタンを経由すると、ViewModelのコンストラクタが呼び出されません。どうしてこれなの? WP7は私のビューとViewModelへの参照をどうにかしていますか?もしそうならば、ビューが離れて移動するときにViewModelを処理するにはどうすれば大きなコレクションをメモリに保持していないのでしょうか? – Nogusta

+0

戻るボタンを押すだけで元のビューがそのままポップアップするようです。戻るボタンを押すと、ViewModelを公開する私のViewModelLocatorプロパティはヒットしません。 – Nogusta

0

NavigationService.Navigateメソッドを使用すると、実際には転送のナビゲーションが実行され、ページの新しいインスタンスが作成されます。ハードウェアの戻るボタンを押すと、に戻るナビゲーションが実行され、前のページが再表示されます。ほとんどの場合、ページの元のインスタンスがキャッシュされたバージョンになります。

OnNavigatedToのページのオーバーライドでバインディングを再評価することはできますが、これによってかなりの「コードの匂い」が発生します。上記のように、Messengerを使用すると、関連付けられたビューモデルを更新することができ、ページ上のバインディングが更新されます。

関連する問題