前回、Azure API Appの簡単な利用方法を解説しました。
今回は、これをXamarin.Formsから利用してみましょう。
- Xamarinプロジェクトを作成する
- XamarinにAPI App呼び出しを組み込む
- MainPageViewModelの作成
- MainPage.xamlの修正
- APIクライアントの組込み
- さあ動かしてみよう!
前回、Azure API Appの簡単な利用方法を解説しました。
今回は、これをXamarin.Formsから利用してみましょう。
本エントリーでは、Microsoft Azure上でWeb(REST) APIを構築するAPI App初心者向けのエントリーです。
対象読者は以下を想定しています。
大丈夫。私も右も左も分からない中からできたので、誰でもできます。
なお本エントリーではRESTクライアントも自動生成しますが、それはXamarinからも利用可能なもの。。。のはずです。まだ試していませんが、.NET Standardで動くので動くでしょうきっと(とは言え、.NET Standard 1.4以上が必要なので、PCLからは利用できません)。
なお、この手の記事は鮮度が非常に重要です。
本エントリーは2017年7月11日時点の情報に則って記載しています。
それでは解説を始めましょう。
続きを読む.NET StandardのプロジェクトからPCLのプロジェクトを無理やり参照しようとしたような場合に発生します。
PackageTargetFallbackを指定しているような場合です。
System.~系への参照が、PCLでは明示的にバージョンが指定されているが.NET Standard側では明示的に指定しないから?見たいですが正確には良く分かりません。
良く分かりませんが、NuGetから次のCompatibilityパッケージをインストールすることで対応可能です。
これは過渡的な対応で、.NET Standard 2.0や.NET Core 2.0がリリースされると心配は不要になるようです?
新たにSelectedItemBehaviorを追加しました。
ListViewで選択された行のItemを引数にCommandを実行するシンプルなBehaviorです。
EventToCommandBehaviorでも似たことはできますが、SelectedItemBehaviorはCommand実行後にSelectedItemを解除することができる点が異なります。
解除の有無はClearSelectedプロパティで制御することができ、falseを設定するとCommand実行後も選択されたままになります。
以下がサンプルコードとなります。
XAML Sample
<ListView ItemsSource="{Binding Fruits}"> <ListView.Behaviors> <behaviorsPack:SelectedItemBehavior Command="{Binding SelectedFruitCommand}"/> </ListView.Behaviors>
C# Sample
public IList<Fruit> Fruits { get; } = new List<Fruit>(); public ICommand SelectedFruitCommand => new Command<Fruit>(fruit => { .... });
本ライブラリはNuGetから利用可能です。
以上です。
2017年7月現在、良く遭遇します。
最初に開いたソリューションで良くなるかも。
起きたら、ソリューションを閉じて開き直したら99%直ります。
ゴミみたいな記事でゴメン(´・ω・`)
追記:
手動でビルドアクションを一度コンパイルにして埋め込みリソースにしても直りますね。こういうの何なんだろうw
— 田淵 義人@エクセルソフト (@ytabuchi) 2017年7月3日
本エントリーでは次の点を整理したいと思います。
システムやアプリケーションを構築していると、様々なパターンのオブジェクトの生成~消滅に遭遇します。
私は常々、オブジェクトの生成~消滅までのライフタイムは、いくつかのパターンに分類できると考えてきました。そのパターンはユーザーインターフェースのアーキテクチャが異なっても、概ね類似したパターンの内に収束すると考えています。スマートデバイスのネイティブ実装でも、Windowsアプリでも、Webアプリでも、です。
そこで改めてオブジェクトの生成~消滅までのライフタイム パターンをまとめ、その留意点や基本原則について、自分の経験に基づいて整理してみました。異論・反論もちろんあると思います。きっとそれは本エントリーを洗練化する一助になると思いますので、ぜひコメントなりTwitter(@nuits_jp) なりにご意見ください。
なお本エントリーのライフタイムの名称は完全に(もしくは一部は)オレオレ用語で一般的な概念とは限りませんので、取り扱いにご注意ください。
続きを読む