2010-01-30 4 views
7

Можно ли прокрутить до определенной строки (по идентификатору объекта) в Silverlight DataGrid, который имеет ItemsSource, который является PagedCollectionView.Можете ли вы использовать ScrollIntoView() с PagedCollectionView в Silverlight DataGrid?

Я загружаю список заказов, которые сгруппированы по дате/статусу и т. Д. Мне нужно прокрутить список до определенного порядка.

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); 
    } 

Есть ли способ сделать это?

ответ

7

Да, вы можете прокручивать элементы в поле зрения, когда источником предмета является PagedCollectionView. Я использую метод групповой прокрутки, который вы описываете, и я просматриваю текущий выбранный элемент в представлении. Чтобы сделать это, у меня есть вспомогательный метод, который использует диспетчер для вызова операции следующим образом:

private void ScrollCurrentSelectionIntoView() 
{ 
    this.dataGrid.Dispatcher.BeginInvoke(() => 
    { 
     this.dataGrid.ScrollIntoView(
      this.dataGrid.SelectedItem, 
      this.dataGrid.CurrentColumn); 
    }); 
} 

Я использовал BeginInvoke потому что в противном случае, вызов ScrollIntoView потерпит неудачу, когда вызывается непосредственно из обработчика событий (предположительно потому, DataGrid неправильно обновил свое состояние для обрабатываемого события). Этот подход обеспечивает правильную обработку текущего события перед вызовом прокрутки.

Смежные вопросы