18章「MVVM」をざっくり試しています。bookの内容に沿ってにざっくり進めます。lifecycle(次回以降)Environment検証した環境は以下で前回同様2016-09-29時点で最新の状態にしています。前回までは、プロパティのMVVMパターンを使ってデータバインディングの実装例をみてきましたが、次は、メソッドをバインドについてです。そこで登場するのがICmmoandインターフェースです。ButtonのClickイベントハンドラーをTapGestureRecognizerのTappedイベントハンドラーからそれぞれのメソッドを呼ぶのではなく、データバインディングによって直接メソッドを呼ぶ機能です。interface)と呼ばれるプロトコルで、8つのclassをサポートしています。ButtonMenuItem、ToolbarItemSearchBarTextCell、ImageCellListVeiwTapGestureRecognizerICommandインターフェースは、3つの定義があります。内容を具体的に書くために、「ButtonをClickしたときの処理」を例として、3つの定義を説明します。arg)メソッドClickされたときのメイン処理。arg)メソッドExecureが実行できるかできないかを判断するメソッド。戻り値がfalseの場合は、Buttonは無効。CanExecuteChangedイベントハンドラーCanExecuteメソッドを実行するイベントハンドラーってところでしょうか。本文(518~519ページあたり)では、概念的な内容がたくさん書いてますので読んでみるとふむふむ♪となります。3の累乗計算アプリ3の累乗の計算結果を表示するアプリです。アプリの概要は、INCREASE(増加)ボタン、またはDECREASE(減)ボタンをクリックすることでで、指数が増減し、計算結果が更新されます。それぞれのボタンのクリックをICommandでデータバインドしています。完成するアプリは以下の動作をするものです。それでは、ViewModelから実装していきます。前回解説したViewModelの基底クラスとなるViewModelBaseクラスを、以下のように実装しています。今回利用するPowersViewModelクラス。ボタンの動作にバインドさせるICommand型のIncreaseExponentCommandとDecreaseExponentCommandを用意しています。この二つはイミュータブルな仕様なので、readonlyプロパティとして定義しています。BaseValueプロパティも同様です。コンストラクターで値をセットしています。18行目で、コンストラクターに引数が一つ必要としていますが、これは、後述のView側から渡します。IncreaseExponentCommandが呼ばれたら、指数のプロパティ(Exponentプロパティ)の値を1追加、DecreaseExponentCommandが呼ばれたら、1減らす。指数の値に変更があれば、計算結果の値を更新するようにコーディングしています。それでは、Viewの実装に移ります。Pageを追加しましょう。PowersOfThreePage.xmalという名称で追加しました。11行目で、バインドしているViewModelのコンストラクターに値を設定しています。この値を2にすれば...PowerOfTwoになります。32行目と36行目で、ButtonのCommandにViewModelのCommandをバインドさせることで、Commandを発火させ指数や合計の値が変更され、データバインドによって画面の表示が更新されますね。これで、最初のイメージの動作ができるようになりました。動かしてみると、「Buttonちっさ!」と感じるので、Buttonの代わりにTapGestureRecognizerを使った実装に変更してみましょう。ボタンのクリックや、タップの振る舞いがViewModelでCommandとして実装されているので、VeiwModel側のコードの変更なく適用できるのはいいですね。次回のサンプルでは、CanExecuteとCanExecuteChangedが登場してもう少し実用的なサンプルが出てきます。当ブログに掲載されている情報は、必ずしも正確性や安全性を保証するものではありません。掲載された内容によって生じた損害等の一切の責任を負いかねます。当ブログに掲載されている情報は個人の見解であり、所属する団体・組織は一切関係ありません。引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。