Как реализовать ленивый загруженный серебристый сетка данных без использования пейджинга

StackOverflow https://stackoverflow.com/questions/2902594

Вопрос

Использование шаблона бизнес-приложений от новых выпущенных служб RIA, вы можете увидеть много примеров, использующих сетку данных сверху DomainDataSource в сочетании с DataPager. Отказ Свойства Progressize и Loadsize могут быть использованы для настройки количества данных, которые будут отображаться на одной странице, и данные, предварительно обработанные на заднем плане.

Теперь я хотел бы получить сетку данных с помощью прокрутки и без пейджера. Базовый DomainDataSource Должен нагружать только данные, которые димируются в сетке. Он должен вызвать другую нагрузку, когда пользователь прокручивается до элементов, которые еще не в контексте данных. Есть ли какие-либо примеры реализации, как это сделать?

Это было полезно?

Решение

Я только что опубликовал пару сообществ в блоге (Часть 1., Часть 2) Это дает мое решение этой проблемы. Я также опубликовал образец Для Github, который реализует свое собственное вознаграждение на концепцию виртуальной связи (я не знаю, как это сравнивается с контролем инфрагистики, потому что я не использовал этого).

Чтобы показать, насколько легко использовать, вот несколько фрагментов из образца. Во-первых, вот как вы используете VirtualCollection, класс, который координирует получать данные:

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

В XAML вы просто связываете Items недвижимость ItemsSource Собственность А. ListBox или DataGrid

Для каждого источника данных вы должны реализовать VirtualCollentsource. Вот какие два ключевых метода Netflixtitertource. выглядит как:

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

Другие советы

Проверьте работу, которую сделал Bea Stollnitz на своем блоге. Хотя не прямой ответ на ваш вопрос, она немного написала на UI и визуализации данных. Вот ссылка из своего блога, который я думаю, может помочь вам начать:

Виртуализация данных: http://bea.stollnitz.com/blog/?p=344.

HTH!
Крис

Это называется скрытным пейджером. Компонент One имеет образец их данных DataGrid, который использует сладкое пейджинг. Как только вы прокрутите вниз, он получает следующую страницу.

http://demo.componentone.com/silverlight/ControLexplorer/#datagrid/stealth%20paging

Показывает демонстрацию, и вы можете скачать образец, который показывает код.

Надеюсь это поможет,

Грег

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top