-
使う
-
機能
-
.NET Framework と言語のサポート
- 小さいが強力な.NET Frameworkのサブセットを含む
-
.NET Framework 3.5 の言語拡張
- 自動プロパティ setter/getter
- オブジェクト初期化子
- コレクション初期化子
- 拡張メソッド
- 暗黙型付け変数
- 匿名型
- データバインディングと通知
- 分離ストレージ
-
コントラクトのある/ない データサービスの利用
-
自己記述型データサービス
- SOAPベースのWebサービスと通信できる
- WSDLによってコントラクトが提供されるので、生成されたプロキシクラスを利用できる
-
データサービスとの疎結合
- SOAPやRSS,Atom,JSON,POX,REST を使ってプロキシクラスを生成せずにサービス利用できる
- LINQ,ラムダ式,拡張メソッド,オブジェクト初期化子
-
StackPanel,Grid,Canvasによるレイアウトサポート
- XAMLレイアウトパネルに配置
-
データバインディングの基礎
- データの表示と管理を簡単に行う方法を提供
- データバインディングの技術を使わず、一連のイベントハンドラを書いて実行することもできる
-
Silverlightのデータバインディング
-
1.FrameworkElement
- データバインディングのターゲットは、FrameworkElement でなければならない
-
2.依存関係プロパティ
-
ターゲットが依存関係プロパティでなければならない
- ほとんどのプロパティは、依存関係プロパティ
-
UI フレームワーク
-
WPF(Windows Presentation Foundation)とSilverlight
-
WPFとSilverlightは同じである
- UIフレームワークというスコープで見た場合、2つは“同じ”
- Silverlightはランタイムのサイズを4MBytes台に抑えるという至上命令があったため、WPFと比べると機能が削られているという違い
-
構文の基礎
- 多くの部分でXAMLありきの設計
-
レイアウト
-
Canvas
- 絶対配置をサポートするPanel
-
StackPanel
- 素を垂直方向または水平方向に積み重ねていくようなレイアウト
-
Grid
- 格子状に要素をレイアウト
- HTMLにおける<table>タグと同様のレイアウト
-
コントロール
- Win32コントロールを再現したものであり、同じ名称のコントロールにおいて個々の役割に大きな違いはない
-
コンテンツ・モデル
- 例えばTextBoxコントロールのコンテンツといえば表示(入力)される文字列(Textプロパティに設定された値)となる
-
分類
- ContentControlタイプのコンテンツ・モデル
- Contentプロパティを持っており、このプロパティは文字列に限らず画像やUI要素といったさまざまなオブジェクトを設定することが可能
- ItemsControlタイプのコンテンツ・モデル
- Itemsプロパティというコンテンツ・プロパティを持っており、このプロパティに対してさまざまなオブジェクトを複数個設定することが可能
-
データ・バインディング
-
基本
- 2つの異なるオブジェクトのプロパティ値を同期させる機能
- 主にUI要素とデータ・オブジェクトとの間でこのバインディングが用いられる
- Bindingクラス
-
DataContextを使ったデータ・バインディング
-
DataContextを使ったデータ・バインディング
- Sourceプロパティに値が設定された場合には、この動作がオーバーライドされる
- DataContextプロパティは、親要素から子要素へ値が継承されるという性質
- 上位の親要素でDataContextプロパティにソースを一度設定するだけで、それを共通のソースとして子要素で利用することができる
-
Model-View-ViewModel パターン
-
秩序と混乱
-
システムの複雑性およびそこに含まれる繰り返し発生する問題
- ソース コードの特定のエンティティに既知の名前を付けることで軽減
- デザイン パターンに応じてコードを意図的に構造化
- UIは、大部分のアプリケーションで最も安定性に欠ける領域
-
Model-View-ViewModel の進化
-
Model-View-Presenter (MVP) パターン
- Model-View-Controller パターンのバリエーション
- 画面上に見えるものが View
- 表示されるデータが Model
- Presenter が両者を結び付け
-
Presentation Model (PM)パターン
- 動作と状態からビューを切り離す点で MVP と同じ
- Presentation Model と呼ばれるビューの抽象化が作成される
- ビューは単に Presentation Model のレンダリングとなる
- Presentation Model は頻繁に View を更新し、両者は相互に同期
-
Model-View-ViewModel (MVVM) パターン
- View の状態と動作を保持しているという点で、Presentation Model と同じ
- View の抽象化が特徴
- ユーザー インターフェイスの作成の簡素化に向けて WPF のコア機能を活用するための標準化された方法
-
汎用的な PM パターンを WPF および Silverlight プラットフォーム向けに特殊化
- ViewModel はビューへの参照を必要としません
- ビューは ViewModel のプロパティにバインド
- ViewModel はモデル オブジェクトに含まれているデータと、ビューに固有の他の状態を公開
- ViewModel オブジェクトはビューの DataContext として設定
- View ではなく、ViewModel がモデル データに加えられたすべての変更を実行
-
WPF 開発者に MVVM が好まれる理由
- 状態および動作から表示を強力に分離する機能
-
利用価値を高めている WPF の最も重要な面
- データ バインド インフラストラクチャ
- ビューのプロパティを ViewModel にバインドすることで、両者の疎結合が実現
- View と単体テストは 2 種類の異なる ViewModel コンシューマ