Можно ли использовать ScrollIntoView () с PagedCollectionView в сетке данных Silverlight? - PullRequest
7 голосов
/ 31 января 2010

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

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

 var pcv = new PagedCollectionView(e.Result.Orders);
 gridOrders.ItemsSource = pcv;

К сожалению, ScrollIntoView(order) не работает из-за PagedCollectionView.

В статье о DataGrid из MSDN показано, что можно прокручиватьдля группы в PagedCollectionView, но это не очень полезно.

  foreach (CollectionViewGroup group in pcv.Groups)
  {
       dataGrid1.ScrollIntoView(group, null);
       dataGrid1.CollapseRowGroup(group, true);
  }

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

1 Ответ

7 голосов
/ 03 ноября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...