ページングを使用せずに怠zyなロードされたシルバーライトデータグリッドを実装する方法

StackOverflow https://stackoverflow.com/questions/2902594

質問

新しいリリースされた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

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

お役に立てれば、

グレッグ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top