WPF ItemsControl - Como saber quando os itens terminaram de carregar, para que eu possa focar o primeiro?
-
21-09-2019 - |
Pergunta
Eu tenho um itemsControl na minha opinião, que está vinculado a uma observaLeCollection da ViewModel. A coleção é preenchida e, depois, um evento da VM para exibir é levantado (pense em resultados de pesquisa e evento de pesquisa).
Eu gostaria de mover o foco do teclado para o primeiro item em um itemsControl, mas quando faço isso no código da exibição ao lidar com o Searchfinished, os itens ainda não foram renderizados (a coleção já está preenchida, mas a renderização do WPF é assíncrona e não foi já aconteceu), então não há nada a focar (foco () precisa ter a árvore visual dos itens já construída).
Eu queria fazer (myiTemsControl.itemcontAinergerator.containerFromIndex (0) como uielement) .focus ();, mas como o 0º item ainda não está carregado, o contêinerFromIndex (0) retorna nulo.
Tentei atrasá -lo com o Dispatcher.BegininVoke ... com baixa prioridade, mas isso depende do tempo exato e geralmente não funciona.
Como posso esperar até que o primeiro item no itemsControl seja carregado?
Solução
Você pode usar o ItemContainerGenerator.StatusChanged
evento, e então verifique seu Status
propriedade. Se o Status == GeneratorStatus.ContainersGenerated
, então você pode obter o primeiro contêiner com segurança.