使用全新发布的RIA服务中的业务应用程序模板,您可以在DomainDataSource
和DataPager
的基础上使用数据网格查看大量示例。属性PageSize和LoadSize可用于调整要在一个页面中显示的数据量以及在后台预取的数据。
现在我想要一个带滚动条但没有寻呼机的数据网格。底层DomainDataSource
应仅加载网格中显示的数据。当用户向下滚动到尚未在数据上下文中的项时,它应该触发另一个加载。是否有任何示例实现如何执行此操作?
答案 0 :(得分:1)
查看Bea Stollnitz在她博客上所做的工作。虽然不是您问题的直接答案,但她已经在UI和数据可视化方面写了很多。以下是她的博客中的链接,我认为这可能有助于您入门:
数据虚拟化:http://bea.stollnitz.com/blog/?p=344
HTH!
克里斯
答案 1 :(得分:1)
它被称为隐形传呼。 Component One有一个使用Stealth Paging的DataGrid示例。一旦向下滚动,它就会显示下一页。
http://demo.componentone.com/Silverlight/ControlExplorer/#DataGrid/Stealth%20Paging
显示演示,您可以下载显示代码的示例。
希望这有帮助,
格雷格
答案 2 :(得分:1)
我刚刚发布了几篇博客文章(Part 1,Part 2),这些帖子为我解决了这个问题。我还向GitHub发布了a sample,它实现了我自己对VirtualCollection概念的看法(我不知道这与Infragistics的控制如何比较,因为我没有使用它)。
为了展示它的易用性,以下是样本中的一些片段。首先,以下是使用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
属性即可
对于每个数据源,您必须实现VirtualCollectionSource。以下是NetflixTitlesSource的两个关键方法:
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
}
}