WPF ItemsControl - cómo saber cuándo los artículos terminados de carga, de modo que pueda centrar el primero?

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

Pregunta

Tengo una ItemsControl en mi opinión, que se une a un ObservableCollection del modelo de vista. La colección está vacío, y después se provoca un evento de VM a la vista (piense resultados de búsqueda y eventos SearchFinished).

Me gustaría mover el foco del teclado al primer elemento de un ItemsControl, pero cuando lo hago en código subyacente de visión en el manejo SearchFinished, los elementos todavía no se representan (la colección está llena ya, pero la representación WPF de es asíncrona y sin embargo, no ocurrió), por lo que no hay nada que se centran necesidades (Focus () para que el árbol visual de los elementos ya construidos).

que quería hacer (myItemsControl.ItemContainerGenerator.ContainerFromIndex (0) como UIElement) .Focus () ;, pero como el elemento 0 ª todavía no está cargado, ContainerFromIndex (0) devuelve null.

He intentado retrasarlo con Dispatcher.BeginInvoke ... con prioridad baja, pero eso depende de la sincronización exacta y por lo general no funciona.

¿Cómo puedo esperar hasta que el primer elemento de ItemsControl está cargado?

¿Fue útil?

Solución

Puede utilizar el evento ItemContainerGenerator.StatusChanged, y después comprobar su propiedad Status. Si el Status == GeneratorStatus.ContainersGenerated, entonces se puede obtener con seguridad el primer contenedor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top