Question

Utilisation du modèle Business Application de la nouvelle marque publiée RIA Services, vous pouvez voir beaucoup d'exemples en utilisant la grille de données sur une DomainDataSource en combinaison avec un DataPager. Les propriétés PageSize et LoadSize peuvent être utilisés pour ajuster la quantité de données à afficher dans une page et les données qui sont préchargées en arrière-plan.

Maintenant, je voudrais avoir une grille de données avec une barre de défilement et pas téléavertisseur. Le DomainDataSource sous-jacente devrait se charger uniquement les données qui diplayed dans la grille. Il devrait déclencher une autre charge, lorsque l'utilisateur fait défiler vers le bas pour les articles qui ne sont pas encore dans le contexte de données. Y at-il la mise en œuvre exemple comment faire?

Était-ce utile?

La solution

Je viens de publier quelques messages de blog ( Partie 1 , Partie 2 ) qui donnent ma solution à ce problème. J'ai également posté un échantillon GitHub qui implémente mon propre point de vue sur le concept de VirtualCollection (je ne sais pas comment cela se compare avec le contrôle de Infragistics, parce que je ne l'ai pas utilisé cela).

Pour montrer comment il est facile à utiliser, voici quelques extraits de l'échantillon. Tout d'abord, voici comment vous utilisez VirtualCollection , la classe les coordonnées de la récupération des données:

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();
    }
}

Dans XAML vous simplement lier la propriété Items à la propriété d'un ItemsSource ListBox ou DataGrid

Pour chaque source de données que vous devez mettre en œuvre un VirtualCollectionSource. Voici ce que les deux principales méthodes de regard NetflixTitlesSource comme:

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
    }
}

Autres conseils

Découvrez le travail que Bea Stollnitz a fait sur son blog. Bien que pas une réponse directe à votre question, elle a écrit un peu sur l'interface utilisateur et la visualisation des données. Voici un lien de son blog que je pense pourrait aider à vous aider à démarrer:

virtualisation des données: http://bea.stollnitz.com/blog/?p= 344

HTH!
Chris

Il est appelé pagination furtif. Un composant a un échantillon de leur DataGrid qui utilise furtif Paging. Dès que vous faites défiler vers le bas, il obtient la page suivante.

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

Affiche la démo, et vous pouvez télécharger l'exemple qui montre le code.

Hope this helps,

Greg

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top