Как реализовать ленивый загруженный серебристый сетка данных без использования пейджинга
-
04-10-2019 - |
Вопрос
Использование шаблона бизнес-приложений от новых выпущенных служб 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
Показывает демонстрацию, и вы можете скачать образец, который показывает код.
Надеюсь это поможет,
Грег