2013-04-12 1 views
13

でmvvmcross V3のViewModelViewModel LifeCycle、いつ廃止されるのですか?

public class TimerViewModel : MvxViewModel 
{ 
    System.Timers.Timer timer; 

    public TimerViewModel() 
    { 
     timer = new System.Timers.Timer(500f); 

     timer.Elapsed += HandleTimerElapsed; 

     timer.Start(); 

    } 

    void HandleTimerElapsed (object sender, ElapsedEventArgs e) 
    { 
     Debug.Log("Time Elapsed"); 
    } 
} 

MvxViewModelは、私は以下のコードを配置する必要がありIDisposableをし、実装していないと?私はmvvmcrossコードはいくつかのMvxWeakEventSubscriptionを持っていることがわかり

timer.Stop(); 
timer.Elapsed += HandleTimerElapsed; 

、それは私の問題を解決するために使用されるのですか?

+0

申し訳ありません - あなたのシナリオを理解できません。あなたがもっと詳細を提供すれば、私は助けようとします。たぶん完全な例を提供してください。ViewModelを処分する必要があります。 – Stuart

+0

@Stuart、更新された質問 –

答えて

10

ViewModelをいつdisposeにするのが簡単かわかりません。特に、ナビゲーション、タブ、分割ビュー、フライアウト、フラグメント、リストなどを含むViewModelプレゼンテーションスタイルのミキシングとマッチングを開始すると、この結果プラットフォーム

、私は過去にタイマーのようなものをシャットダウンしているいくつかの方法は次のとおりです。

時々私はViewModelにに特化したインターフェイスを使用していると私はこれがあることを確認各クライアントで適切に呼び出されます。

  • OnPause/OnResumeアンドロイドで
  • OnNavigatedTo/OnNavigatingFrom Windowsで
  • ViewDidAppear/ViewWillDisappearのiOSで
  • は例えば、私が使用して 'ページ' レベルのビューのいくつかの開始/停止を行っています

これを一般化したパターン(これはhttps://github.com/slodge/MvvmCross/issues/74に記録されています)に追加することを考えましたが、今のところ私はこれをv3に追加していませんインクを使用すると、ユーザー間であまりにも多くの誤解を招くことがあります。必要なときに非常に少数の状況でこれを行うようにする方がよいでしょう。

更新:私はこれについてブログやサンプルを公開している - http://slodge.blogspot.co.uk/2013/11/n42-is-my-viewmodel-visible-can-i-kill.html

2.を参照してください時々私はちょうどMvvmCrossメッセンジャーを通じてイベントの集約を使用しました - と私はそれがWeakReference固有のだ使用してきました - ビューが終了したときにViewModelがガーベージ・コレクションできることを確認するためにベースのメッセージングを使用します。

を経由してあなたは、これは少し非効率的な検討するかもしれない - ティックメッセージがViewModelには存在していない場合でも生成されるように - しかし、それはほんのわずかだinef虚弱

3.私はより多くの最後のイベント使用して考えられてきました - OnNavigatingFrom(BACK)のようなものと「onDestroy」とUINavigationControllerの代表者にいくつかの「final」は検出が...しかし、私は」これを行うには理由があったていませんでした現実のものです。

関連する問題