WPF ItemsControl - come sapere quando gli elementi finiti di carico, in modo che possa mettere a fuoco il primo?

StackOverflow https://stackoverflow.com/questions/2492214

Domanda

Ho un ItemsControl a mio avviso, che è associata a un ObservableCollection da ViewModel. La collezione è piena, e poi un evento da VM per vedere è sollevata (si pensi risultati di ricerca e eventi SearchFinished).

Vorrei spostare il focus della tastiera per la prima voce in un ItemsControl, ma quando lo faccio in di vista code-behind durante la manipolazione SearchFinished, gli elementi non sono ancora resi (la collezione è piena già, ma il rendering di WPF è asincrona e non è successo ancora), quindi non c'è nulla di mettere a fuoco (messa a fuoco () deve avere albero visuale le voci già costruito).

ho voluto fare (myItemsControl.ItemContainerGenerator.ContainerFromIndex (0) come UIElement) .Focus () ;, ma come elemento 0a non è ancora caricato, ContainerFromIndex (0) restituisce il valore null.

Ho provato a ritardarla con Dispatcher.BeginInvoke ... con bassa priorità, ma che dipende tempi esatti e di solito non funziona.

Come posso aspettare fino a quando il primo elemento ItemsControl viene caricato?

È stato utile?

Soluzione

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top