6

Utilizzando il modello di applicazione aziendale dai nuovi servizi RIA rilasciati, è possibile vedere molti esempi utilizzando la griglia di dati su uno DomainDataSource in combinazione con uno DataPager. Le proprietà PageSize e LoadSize possono essere utilizzate per regolare la quantità di dati da visualizzare in una pagina e i dati che vengono precaricati in background.Come implementare una griglia di dati Silverlight pigro senza utilizzare il paging

Ora mi piacerebbe avere una griglia di dati con una barra di scorrimento e nessun cercapersone. Il sottostante DomainDataSource dovrebbe caricare solo i dati che sono visualizzati nella griglia. Dovrebbe attivare un altro carico, quando l'utente scorre verso il basso fino agli elementi che non sono ancora nel contesto dei dati. C'è qualche esempio di implementazione su come fare questo?

+0

Aggiornamento: Dal momento che l'argomento ritorna Attualmente sto indagando controlli 3rd-party. L'Infragistics "VirtualCollection" sembra gestire questo nel modo migliore e può essere associato a DomainServices - roba carina –

risposta

1

Ho appena pubblicato un paio di post di blog (Part 1, Part 2) che danno la mia soluzione a questo problema. Ho anche pubblicato a sample su GitHub che implementa la mia versione del concetto di VirtualCollection (non so come questo si paragoni al controllo di Infragistics, perché non l'ho usato).

Per mostrare quanto sia facile da usare, ecco alcuni frammenti dall'esempio. In primo luogo, ecco come si usa VirtualCollection, la classe che coordina il recupero dei 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 ItemsSource proprietà di un ListBox o DataGrid

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

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

Sembra promettente. Lo verificherò definitivamente Nel frattempo abbiamo seriamente ottimizzato le fonti di infragistica per ottenere questo ... –

1

Dai un'occhiata al lavoro che Bea Stollnitz ha fatto sul suo blog. Sebbene non sia una risposta diretta alla tua domanda, ha scritto parecchio sull'interfaccia utente e sulla visualizzazione dei dati. Qui ci sono un link dal suo blog che credo possa aiutare a iniziare: la virtualizzazione

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

HTH!
Chris

+0

Grazie Chris, finalmente l'ho letto ieri. Hai assolutamente ragione, non è una risposta diretta ma contiene alcune belle proposte. –

+1

Questo link è rotto, ma penso che questo sia lo stesso contenuto di Bea: http://www.zagstudio.com/blog/498#.UE8TT42PXQs – iggymoran

Problemi correlati