6

新しくリリースされたRIAサービスのビジネスアプリケーションテンプレートを使用すると、の上にデータグリッドをDomainDataSource組み合わせて使用​​した多くの例を見ることができますDataPager。プロパティPageSizeおよびLoadSizeを使用して、1ページに表示されるデータの量と、バックグラウンドでプリフェッチされるデータの量を調整できます。

次に、スクロールバーがあり、ポケットベルがないデータグリッドが必要です。基になるDomainDataSourceデータは、グリッドに表示されるデータのみをロードする必要があります。ユーザーがまだデータコンテキストにないアイテムまでスクロールダウンすると、別のロードがトリガーされます。これを行う方法のサンプル実装はありますか?

4

3 に答える 3

1

これは、ステルス ページングと呼ばれます。Component One には、Stealth Paging を使用する DataGrid のサンプルがあります。下にスクロールするとすぐに次のページが表示されます。

http://demo.componentone.com/Silverlight/ControlExplorer/#DataGrid/Stealth%20Paging

デモを表示し、コードを示すサンプルをダウンロードできます。

お役に立てれば、

グレッグ

于 2010-09-05T15:08:25.663 に答える
1

Bea Stollnitz が彼女のブログで行った作業を確認してください。あなたの質問に対する直接的な回答ではありませんが、彼女は UI とデータの視覚化についてかなりの量の記事を書いています。以下は、あなたが始めるのに役立つと思われる彼女のブログからのリンクです。

データの仮想化: http://bea.stollnitz.com/blog/?p=344

チッ!
クリス

于 2010-05-29T04:57:22.247 に答える
1

この問題の解決策を示すブログ投稿 (パート 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バインドするだけListBoxです。DataGrid

データ ソースごとに、VirtualCollectionSource を実装する必要があります。NetflixTitlesSourceの 2 つの主要なメソッドは次のようになります。

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
    }
}
于 2012-08-13T09:31:00.703 に答える