Pregunta

Con la plantilla de solicitud de Empresas de la nueva lanzado RIA, se puede ver un montón de ejemplos utilizando la cuadrícula de datos en la parte superior de un DomainDataSource en combinación con un DataPager. Las propiedades PageSize y LoadSize se pueden utilizar para ajustar la cantidad de datos que se muestran en una página y los datos que se prebuscados en el fondo.

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

¿Fue útil?

Solución

He acaba de publicar un par de entradas de blog ( Parte 1 , Parte 2 ) que dan mi solución a este problema. También he publicado un muestra a GitHub que implementa mi propia visión sobre el concepto VirtualCollection (no sé cómo se compara con el control de Infragistics, porque no he utilizado eso).

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 coordenadas 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 de un ItemsSource ListBox o DataGrid

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

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

Otros consejos

Compruebe hacia fuera el trabajo que Bea Stollnitz ha hecho en su blog. Aunque no es una respuesta directa a su pregunta, ella ha escrito un poco en la interfaz de usuario y visualización de datos. Aquí hay un enlace desde su blog que creo que podría ayudar a empezar:

Los datos de virtualización: http://bea.stollnitz.com/blog/?p= 344

HTH!
Chris

Se llama paginación sigilo. Un componente tiene una muestra de su cuadrícula de datos que utiliza la cautela de paginación. Tan pronto como se desplaza hacia abajo, se hace la siguiente página.

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

Muestra la demo, y se puede descargar la muestra que muestran el código.

Espero que esta ayuda,

Greg

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top