2010-01-30 11 views
7

È possibile scorrere fino a una riga specifica (in base all'identità dell'oggetto) in un Silverlight DataGrid con uno ItemsSource che corrisponde a PagedCollectionView.È possibile utilizzare ScrollIntoView() con un oggetto PagedCollectionView in un SilverGrid DataGrid?

Sto caricando un elenco di ordini raggruppati per giorno/stato ecc. Devo essere in grado di scorrere fino a un ordine particolare.

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

Purtroppo, ScrollIntoView(order) non funziona a causa della PagedCollectionView.

An article on DataGrid from MSDN indica che è possibile scorrere fino a un gruppo in un PagedCollectionView, ma non è molto utile.

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

C'è un modo per farlo?

risposta

7

Sì, è possibile scorrere gli elementi in vista quando la sorgente articolo è PagedCollectionView. Io uso sia il metodo di scorrimento di gruppo che descrivi, sia lo scorrimento della voce attualmente selezionata in vista. Per fare questo, ho un metodo di supporto che utilizza il dispatcher per richiamare l'operazione come segue:

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

ho usato BeginInvoke perché altrimenti, la chiamata a ScrollIntoView fallirebbe quando viene chiamato direttamente da un gestore di eventi (presumibilmente perché il DataGrid non ha aggiornato correttamente il suo stato per l'evento gestito). Questo approccio garantisce che la gestione degli eventi corrente sia completata correttamente prima di richiamare lo scroll.

Problemi correlati