目次
Xamarin案件に参画したので、自分用のメモ書きとして内容を残します。
公式サンプル集
まずは、公式のサンプルを一通り読んで標準のAPIで何ができるのか把握しましょう。
DI
XamarinFormsにはDependencyService クラスという標準のDIが搭載されています。
Microsoft Documents – Xamarin.Forms の DependencyService の概要
ですが、見た感じマルチプラットフォームに特化したものでもない感じなので、Microsoft.Extentions.Dependencyというライブラリで実装したほうが良さそう。下記サイトで同じような感想を持つエンジニアがいます。
Using .NET Extensions to do Dependency Injection in Xamarin.Forms
理由ですが、MicrsoftExtentionsシリーズのライブラリが充実しているので、ロギングとか設定ファイルなどサードパーティーのライブラリで簡単に実装できるからです。
また、モバイルアプリに組み込みデータベースのフレームワークとしてEntiryFrameworkを使用する場合、Microsoft.Extentions.Dependencyが依存関係として付いてくるので、そうなるとDIは DependencyService クラスじゃなくていいかな?と思います。
あと、テストコードでXamarinFormsのAPIを呼び出すとエラーを吐いちゃうので、テストプロジェクトにXamarinFormsを参照しない依存関係にしたいけど、それだとDIに関するコードを参照できないジレンマに陥りそうなので、Microsoft.Extentions.Dependencyを私は推奨します。
カスタムViewの作成方法
プラットフォーム別のプロジェクトにカスタムViewクラスを実装する必要があるので、結構手間がかかります。
例えば、Entryという標準搭載のユーザーが入力できるテキストボックスですが、ボーダーを外す設定プロパティが存在しません。そのため、下記サイトを参考にして実装しました。
Xamarin.Forms Borderless Entryの実装方法
他にも標準搭載のボタンだとテキストを中央にしか配置できないので、これもカスタムViewで実装する必要があります。ラベルにタップイベントを実装すれば解決しますが、それだと、ボタンを押したときに波打つアニメーションが無いです。
ListView
一覧表示するViewはCollectionViewコンポーネントで実装すると便利。
このクラスは標準でスクロールバーを搭載されているし、アイテムがない場合は「〇〇は存在しません」の表示を実装はEmptyViewプロパティを設定するだけです。この存在をしらないで、StackLayoutで実装した人がいるので、必ず知っておいてほしいです。
Microsoft Documents – Xamarin.Forms CollectionView レイアウト –
バインディングコンバーター
「MVVMクラスのとあるBool値のプロパティがtrueの時にViewクラスの表示するプロパティをfalseでバインドしたい」というのが標準APIで実装できなかった。どうやら、IValueConverterでBool値を逆転してバインドするクラスを実装する必要があるそうです。
バインディングコンバーターを使えば、int値が1以上だとtrueでそれ以外はfalseでバインドする。などなど色々できます。
Navigation
モバイルアプリだと物理ボタンの戻るで何処のページに戻るかなどを考慮して実装しないとユーザーに思わぬ場所から遷移されます。あと、前のページから次のページに渡すデータをどうするかなどなど、デクストップアプリと違って画面遷移が多いのでやることが多いです。
下記の公式ドキュメントが分かりやすいので、こちらを参考に実装してください。