前回:検索系まとめ
前回で、サーバーサイドで検索系のメソッドをどうやって作るのかざっと見ました。
今回は、検索系のメソッドをSilverlight側でどうやって呼び出すかをまとめてみようと思います。
色々なケースに対応できるようにするためか、Silverlight側からは、若干色々な書き方が出来るようになっています。
実際に、実装してみたサンプルの記事では、EntityQuery
// 結果は、DomainContextのエンテティのコレクションに充填される dataGrid.ItemsSource = _context.Employees; _context.Load(query, // コールバックを指定するよ (result) => { // 読み込み完了したら、操作可能な状態に戻す this.IsEnabled = true; }, null);
これのほかのバリエーションを見ていこうと思います。やり方に差があるのは、以下の2箇所です。
- 検索結果の受け取り方
- DomainContextのプロパティ(サンプルでやった方法)
- LoadOperation
のEntitiesプロパティ
- 完了時の処理
- Loadメソッドの引数にコールバックを渡す(サンプルでやった方法)
- LoadOperation
のCompletedイベントに登録する
サンプルでやっていないものを見ていこうと思います。
LoadOperationのEntitiesプロパティ
Loadメソッドの引数に渡すコールバックの第一引数は、LoadOperation
_context.Load(query, (result) => { dataGrid.ItemsSource = result.Entities; this.IsEnabled = true; }, null);
LoadOperationのCompletedイベント
Loadメソッドの戻り値は、実はLoadOperation
var operation = _context.Load(query); operation.Completed += (s, evt) => { this.IsEnabled = true; }; dataGrid.ItemsSource = operation.Entities;
MergeOption
最後に、LoadメソッドにはMergeOptionという型の引数を渡すことができるオーバーロードがあります。MergeOptionは、以下の3つの値を持つ列挙型で、引数に渡すことで、指定したマージ方式をとります。
- KeepCurrentValues
- 現在の値を保持
- KeepChanges
- 現在の編集内容を保持
- OverwriteCurrentValues
- 現在の変更と値を無視ってサーバの値で上書きする
ここらへんを呼び分けることで、色々細かな制御が出来るようになっています。