我想在用户滚动数据网格时从我的WCF服务检索数据。有什么办法可以达到这个目的,特别是那些赞成遵循mvvm模式的选项。如何在滚动时填充itemssource
1
A
回答
1
如果有人仍在寻找这个,这里有一种方法可以在Silverlight和MVVM Light中实现它。其他方法也是可能的,比如点击垂直滚动条的位置,但是我相信在没有自定义控件的情况下SL是无法访问的。
在DataGrid LoadingRow事件中,检查当前行是否接近数据绑定itemssource的底部。然后向ViewModel发送消息以开始获取下一组行。 ViewModel中的注册事件添加到数据绑定属性中。
这是一个简化的代码示例。
在后面的代码:
void dg_LoadingRow(object sender, DataGridRowEventArgs e)
{
ObservableCollection<YourDataType> list = dg.ItemsSource as ObservableCollection<YourDataType>;
int idx = list.IndexOf((YourDataType)e.Row.DataContext);
if ((list.Count() - idx) == 5) //start fetching when loading 5th from bottom of current list
{
Messenger.Default.Send(null, "fetchdatatoken");
}
}
在视图模型,实现这样的事情:
Messenger.Default.Register(this, "fetchdatatoken",() =>
{
var returnedList = webservice.getdata(chunkNumber, chunkSize, "any additional parameters you need for your query")
yourListProperty.AddRange(returnedList); //yourListProperty is the databound ObservableCollection property
}
其他项目,你应该代码:添加界限
- 检查
- 如果你的块大小太小,那么你可能想要交易初始加载特殊情况。
- 请注意它在数据库服务器上产生的负载
- 使您的Web服务访问效率更高。例如,在LINQ的使用跳过()和Take()
- 防止多个并发的服务调用
- 小心在客户端的内存使用,处理UnloadingRow事件以释放内存,如果你的列表是大
- 什么否则我可能会丢失
0
我刚刚发表了一些博客文章和样本,而用户通过一个DataGrid滚动它们实现“隐形分页”。我是一个伟大的MVVM粉丝,所以,我的解决方案当然适合这种方法。有关详细信息,请参见this answer。
相关问题
- 1. 使用ItemsSource填充时的样式TabItem
- 2. 向下滚动时填充不正确
- 3. 滚动时保持填充条GridView
- 4. Listview不填充unitl滚动
- 5. IE:水平滚动填充
- 6. 如何启用垂直滚动时添加填充
- 7. UITableView仅在滚动后填充
- 8. 箱尺寸:如何在Firefox中摆脱滚动条填充
- 9. 如何让文本框填充列和自动滚动?
- 10. RecyclerView:在AppBarLayout向上滚动时填充屏幕高度(隐藏)
- 11. 使用动态填充列表视图时滚动条不滚动
- 12. 如何动态填充CheckedListBox?
- 13. 如何在填充另一个表时填充表格?
- 14. 无限滚动已填充的div
- 15. 滚动查看器不填充全屏
- 16. 滚动ListView填充虚拟值
- 17. LinearLayout不填充滚动视图
- 18. 没有填充的滚动numpy数组?
- 19. 如何关闭自动填充/自动填充SSMS 2012?
- 20. 如何在填充
- 21. 如何删除水平滚动条填充(Firefox)?
- 22. 如何设置UICollectionView底部填充和滚动大小
- 23. WPF - 在ItemsSource更改时重置ListBox滚动位置
- 24. 如何在运行时填充本体?
- 25. 如何将自动填充保存在自动填充中选择
- 26. 固定div(左边的菜单)不能100%滚动时填充
- 27. 添加填充顶用的href时要滚动=“#ID”
- 28. 大型列表框滚动时不能很好地填充
- 29. 不能得到滚动条出现时的ItemSource模板填充
- 30. 在启动时填充javascript模板global.asax