めとべや東京10 universal windows platform appの新しいバインディング
TRANSCRIPT
Universal Windows Platform appの新しいバインディング
2015/12/19 めとべや東京 #10
大田 一希
自己紹介
• 名前/SNS• 大田 一希(かずき)
• Twitter: @okazuki
• Blog• かずきのBlog@hatena
http://blog.okazuki.jp/
• その他• Microsoft MVP for Windows Development
• R初心者
お約束事項
• 記載の内容は個人の見解であり、所属する企業を代表するものではありません。
このセッションのゴール
• 新しいバインディングの使い方を知ってもらう
最初に
• 新しいバインディングは結構バグいので要注意
• でもパフォーマンスはいいよ!
従来のデータバインディング
従来のデータバインディング
• {Binding …}のことです
従来のデータバインディング
依存関係プロパティ(コントロールのプロパティ)
プロパティ
OneTime/OneWay
TwoWay
OneWayToSource
従来のデータバインディング
• 実行時に評価される
• 手書きの値の同期よりは遅い• けれど凄く生産性が高い
UWPの新しいバインディング
UWPの新しいバインディング
• {x:Bind …}と書きます
• コンパイル時にバインディング• 超早い
UWPの新しいバインディング
• Modeは以下の通り• OneTime :初回一度きり(デフォルト)
• OneWay :ソースからターゲットへの同期
• TwoWay :ソースとターゲットの双方向
UWPの新しいバインディング
• バインディングのコンテキストはDataContextではない• Page/UserControlがコンテキストとなる
Demo(s)簡単なバインディング
コレクションのバインディング
コレクションのバインディング
• 従来通りINotifyCollectionChangedを実装したコレクションをItemsSourceにバインド
コレクションのバインディング
• DataTtemplateでの型指定• x:DataTypeでDataTemplateのDataContextの型を指定する
Demo(s)
イベントのバインディング
イベントのバインディング
• イベントもバインドできる• {x:Bind イベントハンドラ名}
• イベントハンドラの型• void Hoge()
• void Hoge(object sender, object args)
• void Hoge(object sender, ****EventArgs args)
Demo(s)
Converter & Tips
Converter & Tips
• 型変換や値の加工にはConverterを使います• 従来通りIValueConverterを実装
Converter & Tips
• 型変換が可能だけど違う型なプロパティ同士のバインディング
• キャストすれば確実に代入が可能なバインディング• 何もしないConverterが間に必要
Demo(s)
Converter & Tips
• PageにBindingsというプロパティが生成される• Update()を呼ぶとターゲットの値を強制上書き
• OneTimeも更新されるので最強
Converter & Tips
• ResourceDictionaryで使う方法• x:Class属性をつける
• コードビハインドを準備する
Demo(s)
注意点
• Styleで使えない• 普通のBindingを使いましょう
• 実行時に動的に生成できない• 普通のBindingを使いましょう
• 型変換が走る処理にnullが渡ると死ぬ• 例えばImageのSourceにstringをBindingしてるとき
• 普通のBindingを使うかnullの時に適切な値を返すようにしておく
まとめ
まとめ
• x:Bindは早い
• x:Bindは融通がきかない• 型変換の融通がきかない
• x:Bindで大体のことは出来る• 通常のバインディング
• OneWay/TwoWay/OneTime
• Converterも使える
• いざとなったらBindingsプロパティのUpdateで更新可能
まとめ
• x:Bindでハイパフォーマンスなデータバインディングを!
参考情報
•データバインディングの詳細https://msdn.microsoft.com/ja-jp/library/windows/apps/mt210946.aspx