Domanda

Utilizzando il modello Business Application dal nuovissimo rilasciato RIA Services, è possibile vedere un sacco di esempi che utilizzano la griglia di dati in cima ad una DomainDataSource in combinazione con un DataPager. Le proprietà PageSize e LoadSize possono essere utilizzati per regolare la quantità di dati da visualizzare in una pagina e i dati che sono precaricati in background.

Ora mi piacerebbe avere una griglia di dati con una barra di scorrimento e non cercapersone. Il DomainDataSource sottostante deve caricare solo i dati che sono indicate nella griglia. Dovrebbe innescare un altro carico, quando l'utente scorre verso il basso per gli oggetti che non sono ancora nel contesto di dati. C'è un esempio di implementazione come fare questo?

È stato utile?

Soluzione

Ho appena pubblicato un paio di post di blog ( Parte 1 , Parte 2 ) che danno la mia soluzione a questo problema. Ho anche inviato un campione per GitHub che implementa il mio introito sul concetto VirtualCollection (non so come questo confronta con il controllo di Infragistics, perché non ho usato quello).

Per mostrare quanto sia facile da usare, qui ci sono alcuni frammenti dal campione. In primo luogo, ecco come si usa VirtualCollection , la classe che coordinate che vanno a prendere i dati:

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

In XAML è sufficiente associare la proprietà Items alla proprietà ItemsSource di un ListBox o DataGrid

Per ogni fonte di dati è necessario implementare un VirtualCollectionSource. Ecco quello che i due metodi principali di NetflixTitlesSource assomigliare:

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

Altri suggerimenti

Scopri il lavoro che Bea Stollnitz ha fatto sul suo blog. Anche se non è una risposta diretta alla sua domanda, lei ha scritto un bel po 'sulla UI e visualizzazione dei dati. Qui ci sono un collegamento dal suo blog che penso potrebbe aiutare per iniziare:

I dati di virtualizzazione: http://bea.stollnitz.com/blog/?p= 344

HTH!
Chris

Si chiama paging stealth. Componente Uno ha un campione del loro DataGrid che utilizza Stealth Paging. Non appena si scorre verso il basso, si arriva alla pagina successiva.

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

Spettacoli la demo, e si può scaricare l'esempio che mostrano il codice.

Spero che questo aiuti,

Greg

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top