<igDP:XamDataGrid>
<igDP:XamDataGrid.Resources>
<SolidColorBrush
x:Key="{x:Static igDP:DataPresenterBrushKeys.DataPendingOverlayBrushKey}"
Color="Yellow" />
</igDP:XamDataGrid.Resources>
</Page.Resources>
このトピックは、非同期およびページ化アクセスを使用して待ち時間の長いリモート データストアからデータを取得できるデータソースを作成する方法について説明します。
本トピックの理解を深めるために、以下のトピックを参照することをお勧めします。
このトピックは、以下のセクションで構成されます。
AsyncPagingDataSourceBase は、 xamDataPresenter コントロール群と動作するよう特別にデザインされたスレッド非同期ページング データソースの作成に使用できる抽象基本クラスです。
AsyncPagingDataSourceBase
の主要な機能は、インフラジスティックスの非同期でページ化された VirtualDataSource クラスと xamDataPresenter コントロール群との間でコミュニケーションを調整する機能です。
xamDataPresenter は、VirtualDataSource
クラスと xamDataPresenter コントロール群の機能を繋ぐブリッジを提供します。
VirtualDataSource
クラスは、ページ要求の発行/予測や非同期データ アクセスのスレッドを管理するロジックを含みます。特定のバックエンド プロトコルを使用するデータへアクセスするロジックを持ちませんが、要求の管理や予測および非同期データ アクセスのスレッド管理に関連する基本的なタスクを処理します。これにより、必要なデータ アクセス コードを含む VirtualDataSource
クラスに派生を提供し、必要なプロトコルで特定のバックエンドへアクセスする作業に集中することができます。
具体的な AsyncPagingDataSourceBase
の実装方法はありませんが、AsyncPagingDataSourceBase
から派生される OData データソースのオープンソース参照実装は、 GitHub プロジェクトとして提供されます (サンプル アプリケーション セクション参照)。
VirtualDataSource
クラス (および関連クラス) が特定のバックエンド プロトコル用にデザインされていないため、 GitHub プロジェクトは、派生 VirtualDataSource
関連クラス (ODataVirtualDataSource
、ODataVirtualDataSourceDataProvider
、および ODataVirtualDataSourceDataProviderWorker
) の参照実装も含み、特殊な OData
特定の機能を提供します。
データソース プロジェクトの AsyncPagingDataSourceBase
を使用するには、以下のアセンブリに参照を追加する必要があります。
具体的なデータソースの実装の作成には、AsyncPagingDataSourceBase
の派生実装および AsyncPagingDataSourceBase
とその関連クラスを提供する必要があります。
AsyncPagingDataSourceBase
は、抽象 AsyncPagingDataSourceBase
クラスから派生し、1 つ以上の仮想プロパティと以下のメソッドを提供します。
[必須] CreateUnderlyingDataSource メソッドをオーバーライドし、VirtualDataSource
派生クラスのインスタンスを提供します。
[オプション] CanFilter、 CanGroup、 CanSort プロパティをバックエンドデータ ソースの機能に基づいてオーバーライドします。仮想プロパティはデフォルトで false を返します。
注:
VirtualDataSource
とその関連クラスが特定のバックエンド アクセスに必要な機能を提供する派生/実装クラスを作成します。
[必須] VirtualDataSource
の派生クラスを作成し、バックエンド データへアクセスする方法の定義および制御するために必要なプロパティを公開します。カスタム IDataSourceVirtualDataProvider 実装を返す ResolveDataProviderOverride メソッドをオーバーライドします。
注:
[必須] IDataSourceVirtualDataProvider
を実装するクラスを作成します。
注:
[必須] AsyncVirtualDataSourceProviderWorker から派生するクラスを作成します。
注:
xamDataPresenter 群のコントロールは、他のデータソース同様 AsyncPagingDataSourceBase
データソースとも動作するようデザインされています。コントロールの DataSource プロパティを AsyncPagingDataSourceBase
派生クラスのインスタンスに設定し、コントロールを通常通り使用します。
xamDataPresenter でそのようなデータソースを使用した場合に動作が大きく変わりますが、これはデータが非同期にアクセスされていることに関係しています。
特にエンドユーザーが xamDataPresenter でレコードをスクロールする際に AsyncPagingDataSourceBase
がバックエンド ストアにフェッチ要求を発行し、データが返却されるのを待たずに直ちに返します。 xamDataPresenter UI はレスポンシブ状態を保持しますが、バックエンドがフェッチ要求を処理し、要求データを含むページを返すまで要求されたデータを表示できません。
データ フェッチが保留中であるこをエンド ユーザーに知らせるために、 xamDataPresenter は一時的にデータが保留中の各レコードのセル領域にオーバーレイ要素を描画します。要求データを受け取ると、コントロールは自動的にオーバーレイ要素を削除し、実際のデータを表示します。
データストアのパフォーマンス最大化と拡張機能 (存在する場合) を利用するために、 xamDataPresenter はすべての並べ替えとフィルタリング操作を AsyncPagingDataSourceBase
介してバックエンドへデリゲートします。これらの処理を実行するためにサーバー接続でデータセット全体をプルするための xamDataPresenter の必要性を排除します。
AsyncPagingDataSourceBase
データソースの非同期では、 xamDataPresenter が以前要求したデータが返されるのを待つかどうかをクエリする必要があることに注意してください。以下のプロパティを使用してデータ要求が保留になっているかどうかを決定できます。
DataRecordCellArea.IsDynamicDataPending - 関連する DataRecord のデータが要求されていて、まだ返されてない場合に true を返します。
DataPresenterBase.IsAsyncDataPending - 現在表示されているレコードが非同期データ フェッチの結果として待機データの場合 true を返します。そうでない場合は False。
注:
以下の手順で AsyncPagingDataSourceBase
データソースを使用する xamDataPresenter のパフォーマンスを最適化できます。
FieldsRequested プロパティを設定してデータがフェッチされるフィールド数を制限してサーバー接続によるデータ返却を減らします。AsyncPagingDataSourceBase
のこのプロパティをバックエンド スキーマのフィールドのサブセットに に設定し、リモート データソースからデータをフェッチする際の応答時間を向上できます。あるいは、スキーマ フィールドのサブセットを要求することになるデータ プレゼンターでカスタム フィールド レイアウトを定義することで、最終的にサーバー接続でデータ転送の量を削減できます。
バックエンドにデータのページを返す要求を発行する際のローカル ページのサイズを設定します。これは、 PageSizeRequested プロパティを使用して行うことができます。デフォルトのページ サイズは 200 に設定されています。ページ サイズを縮小することにより各フェッチの接続で返されるデータが少なくなるため、フェッチに要する時間を短縮できます。ただし、大量のデータをスクロールする場合はフェッチ数が増加します。バックエンドのパフォーマンス/応答は、ページ サイズの選択に影響する別の要因です。
論理ページの最大数を設定し、 MaxCachedPages プロパティの設定により要求がバックエンド データソースへ送信される前にメモリを保持します。キャッシュが大きくなるとメモリ使用量は増えますが、すでに表示されたデータのページ要求時にパフォーマンスが向上します。バックエンドのパフォーマンス/応答は、キャッシュ サイズの選択に影響する別の要因があります。
オーバーレイ要素 (ブラシとキーによって、要求されているが提供されていないデータを待つ間に xamDataPresenter コントロールで表示される要素) の色をカスタマイズできます。
以下の例は、xamDataGrid コントロール使用時にオーバーレイ要素の色をカスタマイズする方法の例です。
XAML の場合:
<igDP:XamDataGrid>
<igDP:XamDataGrid.Resources>
<SolidColorBrush
x:Key="{x:Static igDP:DataPresenterBrushKeys.DataPendingOverlayBrushKey}"
Color="Yellow" />
</igDP:XamDataGrid.Resources>
</Page.Resources>
以下の機能は、AsyncPagingDataSourceBase
データソース使用時にサポートされません。
階層および非同種データはサポートされません。フラット同種データのみサポートされます。
レコードの編集および追加と削除はサポートされません。
xamDataPresenter のフィルター ドロップダウンは、データソースがバックエンドで一意の値をクエリする機能をサポートしないため、関連する列の一意のデータ値のリストを含みません。
LabelIcons の FieldLayoutSettings.FilterUIType はサポートされません。前の黒点で説明したクリックされたラベルアイコンが無効な場合にフィルター ドロップダウンに通常表示される一意のデータ値であるため、データソースを使用する際に常に FilterRecord に解決します。
以下の ComparisonOperator がフィルター時にサポートされます。
Match
DoesNotMatch
Like
NotLike
Top
TopPercentile
Bottom
BottomPercentile
以下の SpecialFilterOperands はサポートされません。
BlanksOperand
AverageOperand
グループ化は現在サポートされません。
xamDataPresenter はデータソースでバックエンド ストアへデリゲートしてフィルタリングと並べ替えを最適化するため、並べ替えとフィルタリングは実際のデータ値のみでサポートされます。表示値および非バインド値は、並べ替えまたはフィルターに使用できません。
以下で構成される GitHub サンプルで AsyncPagingDataSourceBase
コンポーネントの使用方法を学べます。
ODataDataSource
の具体的な実装の ODataDataSource
クラス。RESTful API のセットでサーバーベースのデータを公開する industrial standard Open Data Protocol (OData) で公開されたデータへアクセスするようデザインされています。
AsyncPagingDataSourceBase
は以下のプロパティを公開します。
FieldsRequested
- データをリモート データ ソースから取得する際に含むデータ スキーマのプロパティのリストを返すか、設定します。
MaxCachedPages
– ローカルでキャッシュするためにフェッチされたページの最大数を取得または設定します。
PageSizeRequested
– リモート データソースからデータをフェッチする際に必要なページ サイズを返すか、設定します。
RecordCount – リモート データ ソース内のレコード数を返します。(読み取り専用)
ODataDataSource
クラスは以下のパブリック プロパティを公開します (AsyncPagingDataSourceBase
基本クラスで公開されるものに加えて)。
BaseUri
– データをフェッチする OData サービス エンドポイントのルート Uri を返すか、設定します。
EntitySet
– データをフェッチする必要なエンティティのセット (テーブル) を返すか、設定します。この EntitySet
は、BaseUri
で指定した場所で見つかったサービスで公開する必要があります。
TimeoutMilliseconds
– OData API で要求するときに使用するために必要なタイムアウト (ミリ秒) を返すか、設定します。
注:
ODataDataSource
実装クラスを使用したサンプル アプリケーションは、 xamDataPresenter の使用方法や複数のパブリック OData サービス エンドポイントの選択可能な一覧を提供します。
または、 NuGet パッケージの ODataDataSource
実装をダウンロードできます。
以下のトピックでは、このトピックに関連する追加情報を提供しています。