6

Usando la plantilla de aplicación empresarial de los nuevos servicios RIA lanzados, puede ver muchos ejemplos usando la cuadrícula de datos en la parte superior de DomainDataSource en combinación con DataPager. Las propiedades PageSize y LoadSize se pueden usar para ajustar la cantidad de datos que se mostrarán en una página y los datos que se captan previamente en el fondo.Cómo implementar una cuadrícula de datos de Silverlight con carga lenta sin usar paginación

Ahora me gustaría tener una cuadrícula de datos con una barra de desplazamiento y sin buscapersonas. El DomainDataSource subyacente debe cargar solo los datos que se muestran en la cuadrícula. Debería desencadenar otra carga, cuando el usuario se desplaza hacia abajo para elementos que aún no están en el contexto de datos. ¿Hay alguna implementación de muestra de cómo hacer esto?

+0

Actualización: Ya que el tema se vuelve Actualmente estoy investigando controles tercera partes. The Infragistics "VirtualCollection" parece manejar esto de la mejor manera y puede estar vinculado a DomainServices - nice stuff –

Respuesta

1

he acaba de publicar un par de entradas de blog (Part 1, Part 2) que dan mi solución a este problema. También he publicado a sample en GitHub que implementa mi propia opinión sobre el concepto de Colección Virtual (no sé cómo se compara con el control de Infragistics, porque no lo he usado).

Para mostrar lo fácil que es utilizar, aquí hay algunos fragmentos de la muestra. En primer lugar, aquí es cómo se utiliza VirtualCollection, la clase que coordina ir a buscar los datos:

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

En XAML simplemente enlazar la propiedad Items a la propiedad ItemsSource de un ListBox o DataGrid

Para cada fuente de datos que deben implementar un VirtualCollectionSource. Esto es lo que los dos métodos principales de NetflixTitlesSource se parecen:

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

Parece prometedor. Definitivamente lo verificaré. Mientras tanto, modificamos seriamente las fuentes de los infragísticos para lograr esto ... –

1

Mira el trabajo que Bea Stollnitz ha hecho en su blog. Aunque no es una respuesta directa a su pregunta, ella ha escrito bastante sobre UI y visualización de datos. Aquí hay un enlace desde su blog que creo que podría ayudar a empezar: la virtualización

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

HTH!
Chris

+0

Gracias Chris, finalmente lo leí ayer. Tiene toda la razón, no es una respuesta directa, pero contiene algunas buenas propuestas. –

+1

Ese enlace está roto, pero creo que este es el mismo contenido de Bea: http://www.zagstudio.com/blog/498#.UE8TT42PXQs – iggymoran

Cuestiones relacionadas