SlideShare a Scribd company logo
かけ算で使いこなすXamarin 
Xamarin × XAML × iOS API × データバインディング 
2014/10/18(土) わんくま勉強会東京#92 
@matatabi-ux
おやくそく 
掲載内容は個人の私見であり、 
所属組織の見解ではありません
自己紹介: 黒柳達士(@matatabi-ux) 
• お仕事 
⁃ 某第二工場でWindows ストアアプリ大量生産中 
⁃ 拝承系SIer → 安心簡単快適デザイン会社→ 現職 
• 個人活動 
⁃ Blog: 「しっぽを追いかけて」http://matatabi-ux.hateblo.jp 
⁃ facebook: https://www.facebook.com/tatsuj.kuroyanagi 
⁃ 日本人間工学会認定人間工学専門家 
あの!ザッカーバーグと同じ心理学専攻でした 
⁃ 飼い猫写真も垂れ流し中 
twitter: https://twitter.com/burst_cafemocha 
facebook: https://www.facebook.com/burst.cafemocha 
もふもふの自宅警備ネコ「モカ」
今回の目標とおことわり 
• 目標 
⁃ 「プラットフォームごとにコード記述」という足し算的対応ではなく、共通部分はきちんと共通化して、 
固有部分が冗長にならないようすみ分けた「かけ算的」なXamarin の生かし方の1つを共有 
⁃ UI を制するものはクロスプラットフォームを制す!iOS のUI の話題が中心です!・・・ 
Xamarin.Android 持ってないんで>< 
• 注意事項 
⁃ Xamarin は現在進行形で進化中なので仕様が大きく変わるかも 
⁃ XAML をある程度知っているC# エンジニア視点でまとめました 
⁃ XAML が全くわからないとついていけない部分があるかも 
(時間があったら質問どうぞ)
おしながき 
• Xamarin に注目すべき理由 
• Xamarin によるXAML サポート 
• Xamarin.Forms で吸収できない機能の記述 
• プラットフォームの壁を越えるデータバインディング 
• まとめ
突然ですが 
アンケート! 
みなさんがXamarin に興味を 
お持ちの理由は何ですか?
みなさんがXamarin に興味をお持ちの理由は何ですか? 
新しい技術を 
おさえたい 
クロスプラットフォーム 
開発ができる 
仕事で必要 
スマホアプリを 
作ってみたい
Xamarin に注目すべき理由 
IT エンジニア不足が深刻になってきたから(実感) 
「スマートフォン・タブレットアプリ開発」に 
対する回答 
人材の量・質が不足しそう 
人材不足を感じている 
今後サービス利用したい 
19.26% 
41.5% 
35.6% 
IT企業におけるIT人材の不足感 
大幅に不足 
IT企業 
N=790 
ウェブビジネス 
企業 
N=123 
ユーザー企業 
N=345 
やや不足 
N=790 
過不足なし 
やや過剰 
19.0% 
63.2% 
16.1% 
1.4% 
独立行政法人情報処理推進機構(IPA)IT人材育成本部発行「IT 人材白書2014」より
Xamarin に注目すべき理由 
人材・ノウハウはないが新規にスマホアプリを開発したい 
HTML5 で十分な性能・デバイス機能を確保できるか? 
リリースプラットフォームを広げたらコストかかりそう 
デバイスの流行に応じて技術の勉強しなおしが必要?
Xamarin に注目すべき理由 
人材・ノウハウはないが新規にスマホアプリを開発したい 
C# だけでiOS / Android 開発できます 
HTML5 で十分な性能・デバイス機能を確保できるか? 
リリースプラットフォームを広げたらコストかかりそう 
デバイスの流行に応じて技術の勉強しなおしが必要? 
そう、Xamarin ならね
Xamarin 
× 
XAML 
Xamarin による 
XAML のサポート
Xamarin によるXAML サポート 
• Xamarin 3.0 よりXAML によるUI 定義をサポート 
⁃ クロスプラットフォームUI ライブラリXamarin.Forms により宣言的なUI 生成をするXAML 記述が可能 
⁃ iOS 6.1 以降、Android 4.0 以降、Windows Phone 8.0 対応(8.1 はまだ;) 
• UI のレンダリングは各プラットフォームに委譲 
⁃ XAML の記述にしたがい各プラットフォームごとに見た目や振る舞いが変わる 
各デバイスユーザーが慣れて 
いるUI をそのまま使える 
ワンソースでは難しい長所!
Xamarin によるXAML サポート 
• 本家XAML とは非互換・・・まだ出たばっかりだから; 
2014/10/05 現在の対応状況 
WinRT XAML Xamarin.Forms XAML 
Visual Studio のUI デザイナ表示対応非対応 
Visual Studio のインテリセンス対応非対応 
カスタムスタイル&テンプレート対応ListView / TableView への 
DataTemplate のみ 
Visual State & 
Storyboard アニメーション記述 
対応非対応 
アプリ内共有リソースの定義 
ResourceDictionary や 
文字列リソースをファイル定義可能 
定数クラスをx:Static 
マークアップで参照可能 
プラットフォーム別マークアップ切替非対応対応
Xamarin によるXAML サポート 
• Page / Layout / View / Cell 
⁃ 本家XAML とは異なりPage / Layout / View / Cell の基本クラスを継承したUI で構築 
⁃ Page:画面、Layout:パネル、View:コントロール、Cell:ListViewItem のようなイメージ 
Page Layout View Cell 
DataTemplate 
が適用可能 
NavigationPage StackLayout TableView ImageCell
Xamarin によるXAML サポート 
• x:Static による静的クラス参照 
⁃ リソースファイル(.resw)やResourceDictionary の代替となるXAML 拡張 
⁃ Static クラスにstatic な値として定義することでXAML から参照が可能 
<Label Text="Hello, XAML!" 
TextColor="{x:Static local:AppConstants.BackgroundColor}" 
BackgroundColor="{x:Static local:AppConstants.ForegroundColor}" 
Font="{x:Static local:AppConstants.TitleFont}" 
HorizontalOptions="Center" /> AppConstants クラスの 
ForegroundColor の値を設定
Xamarin によるXAML サポート 
• プラットフォーム別マークアップ切替 
⁃ プラットフォームごとのデザインの違いをワンソースで吸収できる仕組みのひとつ 
⁃ 各プラットフォームごとに適用するプロパティ値を個別に指定できる 
<ContentPage.Padding> 
<OnPlatform x:TypeArguments="Thickness“ 
iOS="0, 20, 0, 0“ 
Android="0, 0, 0, 0“ 
WinPhone="0, 0, 0, 0" /> 
</ContentPage.Padding> 
ステータスバーに画面が重ならないように、 
iOS だけ上余白20px を指定
Xamarin 
× 
XAML 
× 
iOS API 
Xamarin.Forms で吸収 
できない機能の記述
Xamarin.Forms で吸収できない機能の記述 
• DependencyService 
⁃ プラットフォーム固有の機能を共有コードから呼び出すための仕組み 
⁃ PCL / Shared プロジェクト側でインターフェースを定義 
⁃ 各プラットフォーム側でインタフェース実装クラスを定義 
⁃ PCL / Shared プロジェクト側からDependensyService.Get<T> で呼び出し 
⁃ ぶっちゃけPCL 化されたUnityContainer で代用できるしそっちの方が高機能 
var storage = DependencyService.Get<ILocalStorage>(); 
If (storage != null) 
{ 
await storage.SaveAsync(); 
} 
共有コード側からインターフェースを通して 
各プラットフォーム固有機能にアクセス 
Shared 
/ PCL 
インター 
フェース 
プラットフォーム固有コード
Xamarin.Forms で吸収できない機能の記述 
• ViewRenderer<View, NativeView> 
⁃ Xamarin.Forms が委譲しているプラットフォーム固有のUI 処理を拡張する仕組み 
⁃ ExportRenderer 属性でXamarin.Forms のUI とRenderer をひもづける 
⁃ View にXamarin.Forms の抽象化されたView の型を記述 
⁃ NativeView に委譲先のプラットフォーム固有のView の型を記述 
⁃ 本家XAML のBehavior に近いイメージの仕組み(描画やイベントハンドラの処理を 
拡張できる) 
⁃ OnElementChanged(生成時)、Dispose(破棄時)など、UI のライフサイクル 
に応じた処理をoverride で拡張できる 
Xamarin 
Forms 
委譲先の 
振り分け 
プラットフォーム固有描画
Xamarin.Forms で吸収できない機能の記述 
[assembly: ExportRenderer(typeof(BottomBar), typeof(BottomBarRenderer))] 
namespace XamarinSample.iOS.Views 
{ 
public class BottomBarRenderer : ViewRenderer<BottomBar, UIToolBar> 
{ 
protected override void OnElementChanged(ElementChangedEventArgs<BottomBar> e) 
{ 
base.OnElementChange(e); 
~UI が生成される際の処理を記述~ 
} 
} 
} 
プラットフォーム固有ViewRenderer 
共有View 
iOS の場合の委譲先クラス 
既定の初期処理が行われる
Xamarin.Forms で吸収できない機能の記述 
• Xamarin.Forms にないBottomBar を固有UI で実装した例 
Android は 
Xamarin ライセンス 
を持ってないので 
作ってません>< 
iPhone 版Windows Phone 版 
実体はUIToolBar 実体はApplicationBar 実体はActionBar ?
Xamarin 
× 
XAML 
× 
iOS API 
× 
データバインディング 
プラットフォームの壁を越える 
データバインディング
プラットフォームの壁を越えるデータバインディング 
• Xamarin.Forms でのXAML によるデータバインディング 
⁃ プロパティをバインド可能にするためにはBindableProperty を定義する 
⁃ BindableProperty は本家XAML の依存関係プロパティに酷似 
⁃ XAML 側ではバインド可能なプロパティにBinding キーワードでバインド可能 
⁃ データコンテキストはBindingContext というプロパティに指定する 
⁃ バインド方向、ValueConverter、Command、StringFormat など利用可能!
プラットフォームの壁を越えるデータバインディング 
• Xamarin.Forms View 側のバインド可能プロパティの記述例 
public static readonly BindableProperty IsEnableStartProperty 
= BindableProperty.Create(“IsEnableStart", 
typeof(bool), 
typeof(BottomBar), 
true, 
BindingMode.TwoWay, 
ValidateIsEnableStart, 
OnIsEnableStartChanged, 
OnIsEnableStartChanging); 
public bool IsEnableStart 
{ 
get { return (bool)this.GetValue(IsEnableStartProperty); } 
set { this.SetValue(IsEnableStartProperty, value); } 
} 
プロパティ名+ Property の名前で定義 
プロパティ名称、データの型、View の型、初期値、 
バインド方向、入力チェックメソッド、 
変更後イベントハンドラ、変更時イベントハンドラ 
の順に定義 
※バインド方向以降の指定は省略可 
外部への公開プロパティも追加
プラットフォームの壁を越えるデータバインディング 
• Xamarin.Forms XAML 側のBinding 指定の記述例 
<view:BottomBar 
StartCommand="{Binding StartCommand}" 
PauseCommand="{Binding PauseCommand}" 
StopCommand="{Binding StopCommand}" 
IsEnableStart="{Binding IsEnableStart}" 
IsEnablePause="{Binding IsEnablePause}" 
IsEnableStop="{Binding IsEnableStop}"> 
<view:BottomBar.BindingContext> 
<vm:TopPageViewModel/> 
</view:BottomBar.BindingContext> 
</view:BottomBar> 
Command のバインドも可能 
BindingContext ≒ DataContext
プラットフォームの壁を越えるデータバインディング 
• iOS 固有ロジックの中でデータバインドを利用したい 
⁃ iOS の主流はMVC のためデータバインディングの機構は標準ではない 
⁃ MVVMCross のフレームワークでiOS からバインド可能だがC# コードごりごり 
(Storyboard 上でのバインド指定はできない) 
⁃ Xamarin でもStoryboard 上でのバインド指定はできない 
? 
Xamarin.Forms とViewRenderer を利用することで 
XAML 上でバインドしたデータ変更をiOS 固有ロジックに 
通知・反映する方法があります!
プラットフォームの壁を越えるデータバインディング 
• BindableProperty の変更を通知するOnElementPropertyChanged 
public class BottomBarRenderer : ViewRenderer<BottomBar, UIToolBar> 
{ 
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
switch (e.PropertyName) 
{ 
case “IsEnableStart”: 
this.startButton.Enabled = this.Element.IsEnableStart; 
break; 
~ 後略~ 
ViewRenderer はView のプロパティ 
変更時のイベントハンドラをoverride 
可能! 
Xamarin.Forms のView はthis.Element で参照可能
プラットフォームの壁を越えるデータバインディング 
• iOS 固有ロジックの中でデータバインドを利用したい 
⁃ iOS のStoryboard を利用したバインドはできないが、BindableProperty を介して 
プロパティの変更を通知・反映することができる 
⁃ 当面はこの方法でデータバインディングをするのが無難 
BindingContext 
Xamarin.Forms 
BindableProperty 
ViewRenderer 
XAML 
Binding 記述 
OnElementProperty 
Changed
DEMO 
時間が余ったので 
デモアプリをお見せします 
※このデモのソースコードはGitHub で公開中 
https://github.com/matatabi-ux/XamarinTimer
まとめ 
• Xamarin のXAML はまだ発展途上 
⁃ Visual Studio だとインテリセンスなし、UI デザイナーなし 
⁃ スタイル・テンプレート・VisualState・アニメーションありません 
⁃ Binding はそこそこいけるし、今後に期待はもてる・・・はず! 
• ViewRenderer でUI 描画・振る舞いを拡張できる 
⁃ 共通化できる場合はXamarin.Forms 無理な場合はRenderer にすみ分け 
⁃ Renderer からはXamarin.Forms やNativeView と連携可能 
⁃ 当面はデータバインディングをXamarin.Forms に委譲するのがよさそう 
Xamarin 
Forms 
委譲先の 
振り分け 
プラットフォーム固有描画

More Related Content

What's hot

Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Yoshito Tabuchi
 
Prism for windows runtime入門
Prism for windows runtime入門Prism for windows runtime入門
Prism for windows runtime入門一希 大田
 
第1回 Japan Xamarin User Group Conference - Xamarin 概要
第1回 Japan Xamarin User Group Conference - Xamarin 概要第1回 Japan Xamarin User Group Conference - Xamarin 概要
第1回 Japan Xamarin User Group Conference - Xamarin 概要
Yoshito Tabuchi
 
無償版Visual StudioでいろいろWeb開発
無償版Visual StudioでいろいろWeb開発無償版Visual StudioでいろいろWeb開発
無償版Visual StudioでいろいろWeb開発
Narami Kiyokura
 
Visual Studio + xamarin で始めるモバイル アプリ開発
Visual Studio + xamarin で始めるモバイル アプリ開発Visual Studio + xamarin で始めるモバイル アプリ開発
Visual Studio + xamarin で始めるモバイル アプリ開発
インフラジスティックス・ジャパン株式会社
 
2016.10.15アプリ発表会
2016.10.15アプリ発表会2016.10.15アプリ発表会
2016.10.15アプリ発表会
b a
 
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM塹壕よりLivetとMVVM
塹壕よりLivetとMVVM
Hiroshi Maekawa
 
Xamarinを利用したアプリ開発
Xamarinを利用したアプリ開発Xamarinを利用したアプリ開発
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 EastiOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
irgaly
 
Xamarin 基礎講座
Xamarin 基礎講座Xamarin 基礎講座
Xamarin 基礎講座
Yoshito Tabuchi
 
マスコットアプリ─ キャラアプリ─ 開発 with Xamarin
マスコットアプリ─ キャラアプリ─ 開発 with Xamarinマスコットアプリ─ キャラアプリ─ 開発 with Xamarin
マスコットアプリ─ キャラアプリ─ 開発 with Xamarin
jz5 MATSUE
 
ゆるふわ Xamarin Tips
ゆるふわ Xamarin Tipsゆるふわ Xamarin Tips
ゆるふわ Xamarin Tips
Daiki Kawanuma
 
Windows ストアアプリを HTMLで作成する
Windows ストアアプリをHTMLで作成するWindows ストアアプリをHTMLで作成する
Windows ストアアプリを HTMLで作成する
Narami Kiyokura
 
#VSUG LT #JXUG の紹介
#VSUG LT #JXUG の紹介#VSUG LT #JXUG の紹介
#VSUG LT #JXUG の紹介
Yoshito Tabuchi
 
XAML + C#で開発するときの Visual Studio 2013(とBlend)の 便利機能
XAML + C#で開発するときのVisual Studio 2013(とBlend)の便利機能XAML + C#で開発するときのVisual Studio 2013(とBlend)の便利機能
XAML + C#で開発するときの Visual Studio 2013(とBlend)の 便利機能
一希 大田
 
Xamarin Overview
Xamarin Overview Xamarin Overview
Xamarin Overview
Madoka Chiyoda
 
JavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へJavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へ
Muyuu Fujita
 
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
慎一 古賀
 
Xamarin を使用したC# によるモバイルアプリ作成
Xamarin を使用したC# によるモバイルアプリ作成Xamarin を使用したC# によるモバイルアプリ作成
Xamarin を使用したC# によるモバイルアプリ作成
Yoshito Tabuchi
 
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
de:code 2017
 

What's hot (20)

Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
 
Prism for windows runtime入門
Prism for windows runtime入門Prism for windows runtime入門
Prism for windows runtime入門
 
第1回 Japan Xamarin User Group Conference - Xamarin 概要
第1回 Japan Xamarin User Group Conference - Xamarin 概要第1回 Japan Xamarin User Group Conference - Xamarin 概要
第1回 Japan Xamarin User Group Conference - Xamarin 概要
 
無償版Visual StudioでいろいろWeb開発
無償版Visual StudioでいろいろWeb開発無償版Visual StudioでいろいろWeb開発
無償版Visual StudioでいろいろWeb開発
 
Visual Studio + xamarin で始めるモバイル アプリ開発
Visual Studio + xamarin で始めるモバイル アプリ開発Visual Studio + xamarin で始めるモバイル アプリ開発
Visual Studio + xamarin で始めるモバイル アプリ開発
 
2016.10.15アプリ発表会
2016.10.15アプリ発表会2016.10.15アプリ発表会
2016.10.15アプリ発表会
 
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM塹壕よりLivetとMVVM
塹壕よりLivetとMVVM
 
Xamarinを利用したアプリ開発
Xamarinを利用したアプリ開発Xamarinを利用したアプリ開発
Xamarinを利用したアプリ開発
 
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 EastiOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
 
Xamarin 基礎講座
Xamarin 基礎講座Xamarin 基礎講座
Xamarin 基礎講座
 
マスコットアプリ─ キャラアプリ─ 開発 with Xamarin
マスコットアプリ─ キャラアプリ─ 開発 with Xamarinマスコットアプリ─ キャラアプリ─ 開発 with Xamarin
マスコットアプリ─ キャラアプリ─ 開発 with Xamarin
 
ゆるふわ Xamarin Tips
ゆるふわ Xamarin Tipsゆるふわ Xamarin Tips
ゆるふわ Xamarin Tips
 
Windows ストアアプリを HTMLで作成する
Windows ストアアプリをHTMLで作成するWindows ストアアプリをHTMLで作成する
Windows ストアアプリを HTMLで作成する
 
#VSUG LT #JXUG の紹介
#VSUG LT #JXUG の紹介#VSUG LT #JXUG の紹介
#VSUG LT #JXUG の紹介
 
XAML + C#で開発するときの Visual Studio 2013(とBlend)の 便利機能
XAML + C#で開発するときのVisual Studio 2013(とBlend)の便利機能XAML + C#で開発するときのVisual Studio 2013(とBlend)の便利機能
XAML + C#で開発するときの Visual Studio 2013(とBlend)の 便利機能
 
Xamarin Overview
Xamarin Overview Xamarin Overview
Xamarin Overview
 
JavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へJavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へ
 
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
 
Xamarin を使用したC# によるモバイルアプリ作成
Xamarin を使用したC# によるモバイルアプリ作成Xamarin を使用したC# によるモバイルアプリ作成
Xamarin を使用したC# によるモバイルアプリ作成
 
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
 

Similar to かけ算で使いこなす Xamarin

Introduction to Xamarin - JXUG 20171209
Introduction to Xamarin - JXUG 20171209Introduction to Xamarin - JXUG 20171209
Introduction to Xamarin - JXUG 20171209
Takeshi Fujimoto
 
Tech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LTTech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LT
terurou
 
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメXamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Yoshito Tabuchi
 
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
Yoshito Tabuchi
 
Blackbelt Online Serminar Parse.comからAWSへのモバイルアプリの移行
Blackbelt Online Serminar Parse.comからAWSへのモバイルアプリの移行Blackbelt Online Serminar Parse.comからAWSへのモバイルアプリの移行
Blackbelt Online Serminar Parse.comからAWSへのモバイルアプリの移行
Amazon Web Services Japan
 
XAML 入門
XAML 入門XAML 入門
XAML 入門
ShinichiAoyagi
 
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介Shotaro Suzuki
 
CloudFormation Getting Started with YAML
CloudFormation Getting Started with YAMLCloudFormation Getting Started with YAML
CloudFormation Getting Started with YAML
Yukitaka Ohmura
 
現場的!オンプレとAWSの違い
現場的!オンプレとAWSの違い現場的!オンプレとAWSの違い
現場的!オンプレとAWSの違い
真吾 吉田
 
Xamarin.Forms.WPF を試してみた
Xamarin.Forms.WPF を試してみたXamarin.Forms.WPF を試してみた
Xamarin.Forms.WPF を試してみた
m ishizaki
 
HTML5でスマートフォン開発の理想と現実
HTML5でスマートフォン開発の理想と現実HTML5でスマートフォン開発の理想と現実
HTML5でスマートフォン開発の理想と現実Takumi Ohashi
 
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programmingオブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional ProgrammingTomoharu ASAMI
 
今からでも間に合う!インフラ自動化超入門 @渋谷
今からでも間に合う!インフラ自動化超入門 @渋谷今からでも間に合う!インフラ自動化超入門 @渋谷
今からでも間に合う!インフラ自動化超入門 @渋谷
Daigou Harada
 
Xamarin.Forms CSS 触ってみました
Xamarin.Forms CSS 触ってみましたXamarin.Forms CSS 触ってみました
Xamarin.Forms CSS 触ってみました
yuta ito
 
Chatterを使ったカスタムソーシャル
Chatterを使ったカスタムソーシャルChatterを使ったカスタムソーシャル
Chatterを使ったカスタムソーシャル
Salesforce Developers Japan
 
Force.com とか @ PaaS祭り
Force.com とか @ PaaS祭りForce.com とか @ PaaS祭り
Force.com とか @ PaaS祭りShinichi Tomita
 
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Kazumi IWANAGA
 
Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用
Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用
Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用
Daisuke Miyamoto
 
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
Inoue Seki
 
Xamarin 概要 2017/01/15
Xamarin 概要 2017/01/15Xamarin 概要 2017/01/15
Xamarin 概要 2017/01/15
Yoshito Tabuchi
 

Similar to かけ算で使いこなす Xamarin (20)

Introduction to Xamarin - JXUG 20171209
Introduction to Xamarin - JXUG 20171209Introduction to Xamarin - JXUG 20171209
Introduction to Xamarin - JXUG 20171209
 
Tech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LTTech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LT
 
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメXamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
 
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
 
Blackbelt Online Serminar Parse.comからAWSへのモバイルアプリの移行
Blackbelt Online Serminar Parse.comからAWSへのモバイルアプリの移行Blackbelt Online Serminar Parse.comからAWSへのモバイルアプリの移行
Blackbelt Online Serminar Parse.comからAWSへのモバイルアプリの移行
 
XAML 入門
XAML 入門XAML 入門
XAML 入門
 
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
 
CloudFormation Getting Started with YAML
CloudFormation Getting Started with YAMLCloudFormation Getting Started with YAML
CloudFormation Getting Started with YAML
 
現場的!オンプレとAWSの違い
現場的!オンプレとAWSの違い現場的!オンプレとAWSの違い
現場的!オンプレとAWSの違い
 
Xamarin.Forms.WPF を試してみた
Xamarin.Forms.WPF を試してみたXamarin.Forms.WPF を試してみた
Xamarin.Forms.WPF を試してみた
 
HTML5でスマートフォン開発の理想と現実
HTML5でスマートフォン開発の理想と現実HTML5でスマートフォン開発の理想と現実
HTML5でスマートフォン開発の理想と現実
 
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programmingオブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
 
今からでも間に合う!インフラ自動化超入門 @渋谷
今からでも間に合う!インフラ自動化超入門 @渋谷今からでも間に合う!インフラ自動化超入門 @渋谷
今からでも間に合う!インフラ自動化超入門 @渋谷
 
Xamarin.Forms CSS 触ってみました
Xamarin.Forms CSS 触ってみましたXamarin.Forms CSS 触ってみました
Xamarin.Forms CSS 触ってみました
 
Chatterを使ったカスタムソーシャル
Chatterを使ったカスタムソーシャルChatterを使ったカスタムソーシャル
Chatterを使ったカスタムソーシャル
 
Force.com とか @ PaaS祭り
Force.com とか @ PaaS祭りForce.com とか @ PaaS祭り
Force.com とか @ PaaS祭り
 
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
 
Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用
Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用
Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用
 
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
 
Xamarin 概要 2017/01/15
Xamarin 概要 2017/01/15Xamarin 概要 2017/01/15
Xamarin 概要 2017/01/15
 

Recently uploaded

論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
atsushi061452
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 

Recently uploaded (15)

論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 

かけ算で使いこなす Xamarin

  • 1. かけ算で使いこなすXamarin Xamarin × XAML × iOS API × データバインディング 2014/10/18(土) わんくま勉強会東京#92 @matatabi-ux
  • 3. 自己紹介: 黒柳達士(@matatabi-ux) • お仕事 ⁃ 某第二工場でWindows ストアアプリ大量生産中 ⁃ 拝承系SIer → 安心簡単快適デザイン会社→ 現職 • 個人活動 ⁃ Blog: 「しっぽを追いかけて」http://matatabi-ux.hateblo.jp ⁃ facebook: https://www.facebook.com/tatsuj.kuroyanagi ⁃ 日本人間工学会認定人間工学専門家 あの!ザッカーバーグと同じ心理学専攻でした ⁃ 飼い猫写真も垂れ流し中 twitter: https://twitter.com/burst_cafemocha facebook: https://www.facebook.com/burst.cafemocha もふもふの自宅警備ネコ「モカ」
  • 4. 今回の目標とおことわり • 目標 ⁃ 「プラットフォームごとにコード記述」という足し算的対応ではなく、共通部分はきちんと共通化して、 固有部分が冗長にならないようすみ分けた「かけ算的」なXamarin の生かし方の1つを共有 ⁃ UI を制するものはクロスプラットフォームを制す!iOS のUI の話題が中心です!・・・ Xamarin.Android 持ってないんで>< • 注意事項 ⁃ Xamarin は現在進行形で進化中なので仕様が大きく変わるかも ⁃ XAML をある程度知っているC# エンジニア視点でまとめました ⁃ XAML が全くわからないとついていけない部分があるかも (時間があったら質問どうぞ)
  • 5. おしながき • Xamarin に注目すべき理由 • Xamarin によるXAML サポート • Xamarin.Forms で吸収できない機能の記述 • プラットフォームの壁を越えるデータバインディング • まとめ
  • 6. 突然ですが アンケート! みなさんがXamarin に興味を お持ちの理由は何ですか?
  • 7. みなさんがXamarin に興味をお持ちの理由は何ですか? 新しい技術を おさえたい クロスプラットフォーム 開発ができる 仕事で必要 スマホアプリを 作ってみたい
  • 8. Xamarin に注目すべき理由 IT エンジニア不足が深刻になってきたから(実感) 「スマートフォン・タブレットアプリ開発」に 対する回答 人材の量・質が不足しそう 人材不足を感じている 今後サービス利用したい 19.26% 41.5% 35.6% IT企業におけるIT人材の不足感 大幅に不足 IT企業 N=790 ウェブビジネス 企業 N=123 ユーザー企業 N=345 やや不足 N=790 過不足なし やや過剰 19.0% 63.2% 16.1% 1.4% 独立行政法人情報処理推進機構(IPA)IT人材育成本部発行「IT 人材白書2014」より
  • 9. Xamarin に注目すべき理由 人材・ノウハウはないが新規にスマホアプリを開発したい HTML5 で十分な性能・デバイス機能を確保できるか? リリースプラットフォームを広げたらコストかかりそう デバイスの流行に応じて技術の勉強しなおしが必要?
  • 10. Xamarin に注目すべき理由 人材・ノウハウはないが新規にスマホアプリを開発したい C# だけでiOS / Android 開発できます HTML5 で十分な性能・デバイス機能を確保できるか? リリースプラットフォームを広げたらコストかかりそう デバイスの流行に応じて技術の勉強しなおしが必要? そう、Xamarin ならね
  • 11. Xamarin × XAML Xamarin による XAML のサポート
  • 12. Xamarin によるXAML サポート • Xamarin 3.0 よりXAML によるUI 定義をサポート ⁃ クロスプラットフォームUI ライブラリXamarin.Forms により宣言的なUI 生成をするXAML 記述が可能 ⁃ iOS 6.1 以降、Android 4.0 以降、Windows Phone 8.0 対応(8.1 はまだ;) • UI のレンダリングは各プラットフォームに委譲 ⁃ XAML の記述にしたがい各プラットフォームごとに見た目や振る舞いが変わる 各デバイスユーザーが慣れて いるUI をそのまま使える ワンソースでは難しい長所!
  • 13. Xamarin によるXAML サポート • 本家XAML とは非互換・・・まだ出たばっかりだから; 2014/10/05 現在の対応状況 WinRT XAML Xamarin.Forms XAML Visual Studio のUI デザイナ表示対応非対応 Visual Studio のインテリセンス対応非対応 カスタムスタイル&テンプレート対応ListView / TableView への DataTemplate のみ Visual State & Storyboard アニメーション記述 対応非対応 アプリ内共有リソースの定義 ResourceDictionary や 文字列リソースをファイル定義可能 定数クラスをx:Static マークアップで参照可能 プラットフォーム別マークアップ切替非対応対応
  • 14. Xamarin によるXAML サポート • Page / Layout / View / Cell ⁃ 本家XAML とは異なりPage / Layout / View / Cell の基本クラスを継承したUI で構築 ⁃ Page:画面、Layout:パネル、View:コントロール、Cell:ListViewItem のようなイメージ Page Layout View Cell DataTemplate が適用可能 NavigationPage StackLayout TableView ImageCell
  • 15. Xamarin によるXAML サポート • x:Static による静的クラス参照 ⁃ リソースファイル(.resw)やResourceDictionary の代替となるXAML 拡張 ⁃ Static クラスにstatic な値として定義することでXAML から参照が可能 <Label Text="Hello, XAML!" TextColor="{x:Static local:AppConstants.BackgroundColor}" BackgroundColor="{x:Static local:AppConstants.ForegroundColor}" Font="{x:Static local:AppConstants.TitleFont}" HorizontalOptions="Center" /> AppConstants クラスの ForegroundColor の値を設定
  • 16. Xamarin によるXAML サポート • プラットフォーム別マークアップ切替 ⁃ プラットフォームごとのデザインの違いをワンソースで吸収できる仕組みのひとつ ⁃ 各プラットフォームごとに適用するプロパティ値を個別に指定できる <ContentPage.Padding> <OnPlatform x:TypeArguments="Thickness“ iOS="0, 20, 0, 0“ Android="0, 0, 0, 0“ WinPhone="0, 0, 0, 0" /> </ContentPage.Padding> ステータスバーに画面が重ならないように、 iOS だけ上余白20px を指定
  • 17. Xamarin × XAML × iOS API Xamarin.Forms で吸収 できない機能の記述
  • 18. Xamarin.Forms で吸収できない機能の記述 • DependencyService ⁃ プラットフォーム固有の機能を共有コードから呼び出すための仕組み ⁃ PCL / Shared プロジェクト側でインターフェースを定義 ⁃ 各プラットフォーム側でインタフェース実装クラスを定義 ⁃ PCL / Shared プロジェクト側からDependensyService.Get<T> で呼び出し ⁃ ぶっちゃけPCL 化されたUnityContainer で代用できるしそっちの方が高機能 var storage = DependencyService.Get<ILocalStorage>(); If (storage != null) { await storage.SaveAsync(); } 共有コード側からインターフェースを通して 各プラットフォーム固有機能にアクセス Shared / PCL インター フェース プラットフォーム固有コード
  • 19. Xamarin.Forms で吸収できない機能の記述 • ViewRenderer<View, NativeView> ⁃ Xamarin.Forms が委譲しているプラットフォーム固有のUI 処理を拡張する仕組み ⁃ ExportRenderer 属性でXamarin.Forms のUI とRenderer をひもづける ⁃ View にXamarin.Forms の抽象化されたView の型を記述 ⁃ NativeView に委譲先のプラットフォーム固有のView の型を記述 ⁃ 本家XAML のBehavior に近いイメージの仕組み(描画やイベントハンドラの処理を 拡張できる) ⁃ OnElementChanged(生成時)、Dispose(破棄時)など、UI のライフサイクル に応じた処理をoverride で拡張できる Xamarin Forms 委譲先の 振り分け プラットフォーム固有描画
  • 20. Xamarin.Forms で吸収できない機能の記述 [assembly: ExportRenderer(typeof(BottomBar), typeof(BottomBarRenderer))] namespace XamarinSample.iOS.Views { public class BottomBarRenderer : ViewRenderer<BottomBar, UIToolBar> { protected override void OnElementChanged(ElementChangedEventArgs<BottomBar> e) { base.OnElementChange(e); ~UI が生成される際の処理を記述~ } } } プラットフォーム固有ViewRenderer 共有View iOS の場合の委譲先クラス 既定の初期処理が行われる
  • 21. Xamarin.Forms で吸収できない機能の記述 • Xamarin.Forms にないBottomBar を固有UI で実装した例 Android は Xamarin ライセンス を持ってないので 作ってません>< iPhone 版Windows Phone 版 実体はUIToolBar 実体はApplicationBar 実体はActionBar ?
  • 22. Xamarin × XAML × iOS API × データバインディング プラットフォームの壁を越える データバインディング
  • 23. プラットフォームの壁を越えるデータバインディング • Xamarin.Forms でのXAML によるデータバインディング ⁃ プロパティをバインド可能にするためにはBindableProperty を定義する ⁃ BindableProperty は本家XAML の依存関係プロパティに酷似 ⁃ XAML 側ではバインド可能なプロパティにBinding キーワードでバインド可能 ⁃ データコンテキストはBindingContext というプロパティに指定する ⁃ バインド方向、ValueConverter、Command、StringFormat など利用可能!
  • 24. プラットフォームの壁を越えるデータバインディング • Xamarin.Forms View 側のバインド可能プロパティの記述例 public static readonly BindableProperty IsEnableStartProperty = BindableProperty.Create(“IsEnableStart", typeof(bool), typeof(BottomBar), true, BindingMode.TwoWay, ValidateIsEnableStart, OnIsEnableStartChanged, OnIsEnableStartChanging); public bool IsEnableStart { get { return (bool)this.GetValue(IsEnableStartProperty); } set { this.SetValue(IsEnableStartProperty, value); } } プロパティ名+ Property の名前で定義 プロパティ名称、データの型、View の型、初期値、 バインド方向、入力チェックメソッド、 変更後イベントハンドラ、変更時イベントハンドラ の順に定義 ※バインド方向以降の指定は省略可 外部への公開プロパティも追加
  • 25. プラットフォームの壁を越えるデータバインディング • Xamarin.Forms XAML 側のBinding 指定の記述例 <view:BottomBar StartCommand="{Binding StartCommand}" PauseCommand="{Binding PauseCommand}" StopCommand="{Binding StopCommand}" IsEnableStart="{Binding IsEnableStart}" IsEnablePause="{Binding IsEnablePause}" IsEnableStop="{Binding IsEnableStop}"> <view:BottomBar.BindingContext> <vm:TopPageViewModel/> </view:BottomBar.BindingContext> </view:BottomBar> Command のバインドも可能 BindingContext ≒ DataContext
  • 26. プラットフォームの壁を越えるデータバインディング • iOS 固有ロジックの中でデータバインドを利用したい ⁃ iOS の主流はMVC のためデータバインディングの機構は標準ではない ⁃ MVVMCross のフレームワークでiOS からバインド可能だがC# コードごりごり (Storyboard 上でのバインド指定はできない) ⁃ Xamarin でもStoryboard 上でのバインド指定はできない ? Xamarin.Forms とViewRenderer を利用することで XAML 上でバインドしたデータ変更をiOS 固有ロジックに 通知・反映する方法があります!
  • 27. プラットフォームの壁を越えるデータバインディング • BindableProperty の変更を通知するOnElementPropertyChanged public class BottomBarRenderer : ViewRenderer<BottomBar, UIToolBar> { protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case “IsEnableStart”: this.startButton.Enabled = this.Element.IsEnableStart; break; ~ 後略~ ViewRenderer はView のプロパティ 変更時のイベントハンドラをoverride 可能! Xamarin.Forms のView はthis.Element で参照可能
  • 28. プラットフォームの壁を越えるデータバインディング • iOS 固有ロジックの中でデータバインドを利用したい ⁃ iOS のStoryboard を利用したバインドはできないが、BindableProperty を介して プロパティの変更を通知・反映することができる ⁃ 当面はこの方法でデータバインディングをするのが無難 BindingContext Xamarin.Forms BindableProperty ViewRenderer XAML Binding 記述 OnElementProperty Changed
  • 29. DEMO 時間が余ったので デモアプリをお見せします ※このデモのソースコードはGitHub で公開中 https://github.com/matatabi-ux/XamarinTimer
  • 30. まとめ • Xamarin のXAML はまだ発展途上 ⁃ Visual Studio だとインテリセンスなし、UI デザイナーなし ⁃ スタイル・テンプレート・VisualState・アニメーションありません ⁃ Binding はそこそこいけるし、今後に期待はもてる・・・はず! • ViewRenderer でUI 描画・振る舞いを拡張できる ⁃ 共通化できる場合はXamarin.Forms 無理な場合はRenderer にすみ分け ⁃ Renderer からはXamarin.Forms やNativeView と連携可能 ⁃ 当面はデータバインディングをXamarin.Forms に委譲するのがよさそう Xamarin Forms 委譲先の 振り分け プラットフォーム固有描画