18章「MVVM」をざっくり試しています。bookの内容に沿ってにざっくり進めます。lifecycle(今回)Environment検証した環境は以下で前回同様2016-09-29時点で最新の状態にしています。lifecycleデータの保存と復元ViewModelにライフサイクルというテーマで、前回の簡易足し算アプリで、以下の機能を実装します。実装の前に、本文で述べられている概要というか概念をざっくり書いておきます。ViewModelにライフサイクルを実現するためには、VeiwModelでその状態を保存・復元(リストア)するパブリックなメソッドの定義をすることです。ViewModelは、プラットフォームに依存しないようにしなければならないため、プラットフォーム固有のメソッドなどは使うべきではありません。前述を加味したプラクティスとして、IDoctionaryのオブジェクトを使ってにデータを保存・リストアする方法を紹介します。コードですが、ViewModelに以下のメソッドを追加します。RestoreStateメソッドで、dictionayにviewModelのデータを保存します。SaveStateメソッドでdictonaryにViwModelのデータをリストアします。値がなければ、初期値をセット。アプリの起動時=App.csで、保存したりリストアしたりすればOKですね。保存先は、Current。これは、Xamarin.Forms名前空間のApplication型のオブジェクトです。これで無事にアプリをSleepさせても再度起動したときにはSleep直前の状態で表示されます。縦と横の...本文では、もう1トピック、縦で表示したとき横で表示したときの対応を、コードビハインドで書いているようですね。15行目のOnPageSizeChangedメソッドです。まとめ本文をざっくりざっくり引用します。今回のサンプルでViewModelを処理する1つの例をみせましたが、これが唯一の方法ではありません。今回のようにApp.csでViewModelのインスタンス化することも可能ですし、コードビハインドのAddingMachinePage.xaml.csのコンストラクターでアクセス可能なViewModelのプロパティを定義することもできます。AddingMachinePageクラスで、App.csのOnSleepメソッドから呼ばれるAddingMachinePageクラス自身のOnSleepメソッドを定義することもできます。AddingMachinePageクラスで、ViewModelのインスタンス化を処理したり、RestoreStateメソッドやSaveStateメソッドを呼ぶ処理をすることもできます。このアプローチは、複数ページを持つアプリでは、ぎこちない実装になるかもしれません。複数ページを持つアプリの場合、ページごとにVeiwModelを分割するかもしれないし、全てのページに適用できるプロパティを持ったViewModelを構成するかもしれません。そのようなケースでは、それぞれのViewModelの状態を保存するのにdictonaryのkeyがかぶらないようにしないといけないでしょう。そんな時は、「クラス名-プロパティ名」のようなkeyを指定するとよいでしょう。いった感じで、18章は終了です。ここら辺の基礎知識を理解して、より実践的にかつ便利に実装するためにPrismを使って実装することがベストプラクティスかと思います。当ブログに掲載されている情報は、必ずしも正確性や安全性を保証するものではありません。掲載された内容によって生じた損害等の一切の責任を負いかねます。当ブログに掲載されている情報は個人の見解であり、所属する団体・組織は一切関係ありません。引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。