2010-03-22 14 views
6

我在View中有一個ItemsControl,它綁定到ViewModel的ObservableCollection。該集合被填充,然後從VM中引發一個事件進行查看(認爲搜索結果和SearchFinished事件)。WPF ItemsControl - 如何知道項目何時完成加載,以便我可以集中第一個?

我想將鍵盤焦點移動到ItemsControl中的第一項,但是當我在處理SearchFinished時在View的代碼隱藏中執行它時,項目尚未渲染(集合已經填充,但wpf的渲染是異步,並沒有發生),所以沒有什麼可以關注的(Focus()需要讓項目的可視化樹已經構建完成)。我想做(myItemsControl.ItemContainerGenerator.ContainerFromIndex(0)作爲UIElement).Focus();,但作爲第零項尚未加載,ContainerFromIndex(0)返回null。

我試圖用Dispatcher.BeginInvoke ...延遲它與低優先級,但這是依賴於確切的時間,通常不起作用。

我該如何等待ItemsControl中的第一項加載?

回答

8

您可以使用ItemContainerGenerator.StatusChanged事件,然後檢查其Status屬性。如果Status == GeneratorStatus.ContainersGenerated,那麼你可以安全地獲得第一個容器。

+0

謝謝,這個作品完美! – 2010-03-22 13:58:39

相關問題