2010-03-22 7 views
6

Ho un ItemsControl nella mia vista, che è associato a ObservableCollection da ViewModel. La raccolta viene riempita e in seguito viene generato un evento dalla VM alla vista (si pensi ai risultati della ricerca e all'evento SearchFinished).WPF ItemsControl - come sapere quando gli oggetti hanno terminato il caricamento, in modo da poter mettere a fuoco il primo?

Vorrei spostare lo stato attivo della tastiera sul primo elemento in un oggetto ItemsControl, ma quando lo faccio nel code-behind di View quando gestisco SearchFinished, gli elementi non sono ancora visualizzati (la raccolta è già piena, ma il rendering di wpf è asincrono e non si è ancora verificato), quindi non c'è nulla da mettere a fuoco (Focus() deve avere già costruito l'albero visivo degli elementi).

Desidero eseguire (myItemsControl.ItemContainerGenerator.ContainerFromIndex (0) come UIElement) .Focus() ;, ma poiché l'elemento 0 non è ancora stato caricato, ContainerFromIndex (0) restituisce null.

Ho provato a ritardarlo con Dispatcher.BeginInvoke ... con priorità bassa, ma questo dipende dal tempo esatto e di solito non funziona.

Come è possibile attendere il caricamento del primo elemento in ItemsControl?

risposta

8

È possibile utilizzare l'evento ItemContainerGenerator.StatusChanged e quindi controllare la proprietà Status. Se il Status == GeneratorStatus.ContainersGenerated, allora si può tranquillamente ottenere il primo contenitore.

+0

Grazie, funziona perfettamente! –

Problemi correlati