您可以在 Silverlight DataGrid 中将 ScrollIntoView() 与 PagedCollectionView 一起使用吗?
Posted
技术标签:
【中文标题】您可以在 Silverlight DataGrid 中将 ScrollIntoView() 与 PagedCollectionView 一起使用吗?【英文标题】:Can you use ScrollIntoView() with a PagedCollectionView in a Silverlight DataGrid? 【发布时间】:2011-01-11 07:32:48 【问题描述】:是否可以滚动到具有 ItemsSource
的 Silverlight DataGrid
中的特定行(按对象标识),这是一个 PagedCollectionView
。
我正在加载按日期/状态等分组的订单列表。我需要能够滚动到特定订单。
var pcv = new PagedCollectionView(e.Result.Orders);
gridOrders.ItemsSource = pcv;
很遗憾,ScrollIntoView(order)
不起作用,因为 PagedCollectionView
。
An article on DataGrid from MSDN 表明可以滚动到PagedCollectionView
中的组,但这并没有多大用处。
foreach (CollectionViewGroup group in pcv.Groups)
dataGrid1.ScrollIntoView(group, null);
dataGrid1.CollapseRowGroup(group, true);
有没有办法做到这一点?
【问题讨论】:
【参考方案1】:是的,当项目源是PagedCollectionView
时,可以将项目滚动到视图中。我使用您描述的组滚动方法并将当前选定的项目滚动到视图中。为此,我有一个辅助方法,它使用调度程序调用操作,如下所示:
private void ScrollCurrentSelectionIntoView()
this.dataGrid.Dispatcher.BeginInvoke(() =>
this.dataGrid.ScrollIntoView(
this.dataGrid.SelectedItem,
this.dataGrid.CurrentColumn);
);
我使用了BeginInvoke
,否则,当直接从事件处理程序调用时,对ScrollIntoView
的调用将失败(可能是因为DataGrid
没有正确更新其正在处理的事件的状态)。这种方法可确保在调用滚动之前正确完成当前事件处理。
【讨论】:
以上是关于您可以在 Silverlight DataGrid 中将 ScrollIntoView() 与 PagedCollectionView 一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章
Silverlight 利用DataGrid行加载事件动态控制行列显示
在 Silverlight 中更改 Datagrid Header 的背景颜色
WPF DataGrid 样式-Silverlight DataGrid?