您可以在 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

在 Silverlight 中更改 Datagrid Header 的背景颜色

WPF DataGrid 样式-Silverlight DataGrid?

Silverlight DataGrid:导出到 excel 或 csv

在 Silverlight DataGrid 中设置初始排序顺序?