WPF ItemsControl - come sapere quando gli elementi finiti di carico, in modo che possa mettere a fuoco il primo?
-
21-09-2019 - |
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?
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.