是否可以在 Silverlight 中滚动到特定行(按对象标识)DataGrid http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid(VS.95).aspx有一个ItemsSource http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.itemssource(v=VS.95).aspx这是一个PagedCollectionView http://msdn.microsoft.com/en-us/library/system.windows.data.pagedcollectionview(VS.95).aspx.
我正在加载按日期/状态等分组的订单列表。我需要能够滚动到特定订单。
var pcv = new PagedCollectionView(e.Result.Orders);
gridOrders.ItemsSource = pcv;
很遗憾,ScrollIntoView(order) http://msdn.microsoft.com/en-us/library/cc673083(VS.95).aspx不起作用,因为PagedCollectionView http://msdn.microsoft.com/en-us/library/system.windows.data.pagedcollectionview(VS.95).aspx.
MSDN 上有关 DataGrid 的文章 http://msdn.microsoft.com/en-us/library/dd833072(VS.95).aspx表明可以滚动到某个组PagedCollectionView http://msdn.microsoft.com/en-us/library/system.windows.data.pagedcollectionview(VS.95).aspx,但这并没有多大用处。
foreach (CollectionViewGroup group in pcv.Groups)
{
dataGrid1.ScrollIntoView(group, null);
dataGrid1.CollapseRowGroup(group, true);
}
有没有办法做到这一点 ?
是的,当项目源是一个时,可以将项目滚动到视图中PagedCollectionView http://msdn.microsoft.com/en-us/library/system.windows.data.pagedcollectionview(VS.95).aspx。我使用您描述的组滚动方法,并将当前选定的项目滚动到视图中。为此,我有一个辅助方法,它使用调度程序来调用操作,如下所示:
private void ScrollCurrentSelectionIntoView()
{
this.dataGrid.Dispatcher.BeginInvoke(() =>
{
this.dataGrid.ScrollIntoView(
this.dataGrid.SelectedItem,
this.dataGrid.CurrentColumn);
});
}
I used BeginInvoke http://msdn.microsoft.com/en-us/library/cc190259(VS.95).aspx因为否则的话,调用ScrollIntoView http://msdn.microsoft.com/en-us/library/cc673083(VS.95).aspx当直接从事件处理程序调用时会失败(大概是因为DataGrid http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid(VS.95).aspx没有正确更新正在处理的事件的状态)。此方法可确保当前事件处理在调用滚动之前正确完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)