ページングを使用せずに怠zyなロードされたシルバーライトデータグリッドを実装する方法
-
04-10-2019 - |
質問
新しいリリースされたRIAサービスのビジネスアプリケーションテンプレートを使用すると、Aの上にデータグリッドを使用して多くの例を見ることができます DomainDataSource
と組み合わせて DataPager
. 。プロパティページサイズとロードサイズを使用して、1つのページに表示されるデータの量と、バックグラウンドでプリフされるデータを調整できます。
今、私はスクロールバーとポケットベルを備えたデータグリッドを持ちたいです。根底にある DomainDataSource
グリッドに外出されるデータのみをロードする必要があります。ユーザーがまだデータコンテキストにないアイテムまでスクロールダウンすると、別の負荷をトリガーする必要があります。これを行う方法はありますか?
解決
いくつかのブログ投稿を公開しました(パート1, パート2)この問題に対する私の解決策を与えます。私も投稿しました サンプル VirtualCollectionの概念を自分で考えているGithubに(これがInfragisticsのコントロールとどのように比較されるかはわかりません。
使用がどれほど簡単かを示すために、サンプルからのいくつかのスニペットがあります。まず、使用方法は次のとおりです VirtualCollection, 、データの取得を調整するクラス:
public class MainViewModel : ViewModel
{
private NetflixTitlesSource _source;
public VirtualCollection<Title> Items { get; private set; }
public MainViewModel()
{
_source = new NetflixTitlesSource();
Items = new VirtualCollection<Title>(_source, pageSize: 20, cachedPages: 5);
}
protected override void OnViewLoaded()
{
Items.Refresh();
}
}
XAMLでは、単にバインドします Items
のプロパティ ItemsSource
aの財産 ListBox
また DataGrid
各データソースについて、VirtualCollectionSourceを実装する必要があります。これが2つの重要な方法です netflixtitlesdource のように見える:
public class NetflixTitlesSource : VirtualCollectionSource<Title>
{
protected override Task<int> GetCount()
{
return GetQueryResults(0, 1, null)
.ContinueWith(t => (int)t.Result.TotalCount, TaskContinuationOptions.ExecuteSynchronously);
}
protected override Task<IList<Title>> GetPageAsyncOverride(int start, int pageSize, IList<SortDescription> sortDescriptions)
{
return GetQueryResults(start, pageSize, sortDescriptions)
.ContinueWith(t => (IList<Title>)((IEnumerable<Title>)t.Result).ToList(), TaskContinuationOptions.ExecuteSynchronously);
}
private Task<QueryOperationResponse<Title>> GetQueryResults(int start, int pageSize, IList<SortDescription> sortDescriptions)
{
// code to query the Netflix OData API
}
}
他のヒント
Bea Stollnitzが彼女のブログで行った作品をチェックしてください。あなたの質問への直接的な答えではありませんが、彼女はUIとデータの視覚化についてかなり書いています。彼女のブログからのリンクは、私があなたを始めるのに役立つと思うかもしれないと思います:
データ仮想化: http://bea.stollnitz.com/blog/?p=344
hth!
クリス
ステルスページングと呼ばれます。コンポーネント1には、ステルスページングを使用するデータグリッドのサンプルがあります。下にスクロールするとすぐに、次のページが表示されます。
http://demo.componentone.com/silverlight/controlexplorer/#datagrid/stealth%20paging
デモを表示すると、コードを表示するサンプルをダウンロードできます。
お役に立てれば、
グレッグ