2

iOS の Conference チュートリアルによく似た TabBarController を実装しました。タブの Viewmodels の Init メソッドが通常のように呼び出されないように見えることを除いて、すべてが正常に機能しています。

Init が確実に呼び出されるようにするために忘れていたことはありますか? 必要に応じて、このコードを ViewModel のコンストラクターに移動することもできますが、可能であればこれは避けたいと思います。

編集

ここで私が本当に求めているのは、ビューモデルを手動でインスタンス化し、拡張/ヘルパー メソッドを介してそこからビューを「作成」した場合、プロセスのある時点で init が呼び出されることでしょうか? もしそうなら、どの時点で init がビューモデルで呼び出されると期待できますか?

4

1 に答える 1

4

Construction-Initialize-ReloadState-Start (CIRS) シーケンスはMvxViewModel、既定の ViewModel ロケーターを使用して作成された場合に呼び出されます。これは、 を呼び出したときに発生しますShowViewModel

newサブタブの ViewModel が ViewModel を直接呼び出して作成された場合( Conference HomeViewModel.cs#L11 のように)、明らかにこれと同じシーケンスは発生しません。

実際、ここでの違いは次のとおりです。

  • ViewModel単なるINotifyPropertyChangedオブジェクトである tab s
  • オブジェクトでもあるが、さらにナビゲーション内で初期化されることが期待されるページレベルMvxViewModelの s 。INotifyPropertyChanged

2 つの概念を統一したい場合は、おそらく可能です...しかし、実際には、おそらく 2 つのクラス型に異なる名前を付けて、初期化コードをタブ ビュー モデルのコンストラクターに配置する方が簡単でわかりやすいのではないかと思います。または、コンストラクターInitでそれらを自分で呼び出すだけです。Home

于 2013-06-27T23:34:31.257 に答える