WPF ItemsControl – как узнать, когда элементы завершили загрузку, чтобы я мог сфокусировать первый из них?

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

Вопрос

У меня есть ItemsControl в моем представлении, который привязан к ObservableCollection из ViewModel.Коллекция заполняется, а затем создается событие от виртуальной машины для просмотра (например, результаты поиска и событие SearchFinished).

Я хотел бы переместить фокус клавиатуры на первый элемент в ItemsControl, но когда я делаю это в коде View при обработке SearchFinished, элементы еще не визуализируются (коллекция уже заполнена, но рендеринг wpf является асинхронным и не выполняется). пока этого не произошло), поэтому фокусировать не на чем (Focus() необходимо, чтобы визуальное дерево элементов уже было построено).

Я хотел сделать (myItemsControl.ItemContainerGenerator.ContainerFromIndex(0) as UIElement).Focus();, но поскольку 0-й элемент еще не загружен, ContainerFromIndex(0) возвращает значение null.

Я попробовал отложить это с помощью Dispatcher.BeginInvoke...с низким приоритетом, но это зависит от точного времени и обычно не работает.

Как я могу дождаться загрузки первого элемента в ItemsControl?

Это было полезно?

Решение

Вы можете использовать ItemContainerGenerator.StatusChanged событие, а затем проверьте его Status свойство.Если Status == GeneratorStatus.ContainersGenerated, то вы смело можете получить первый контейнер.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top