2010-03-22 17 views
6

Görünümüm'de ViewModel'den Gözlemlenebilir Bir Veritabanına bağlı bir ItemsControl var. Koleksiyon dolduruldu ve daha sonra VM'den görüntüye bir etkinlik yükseltildi (arama sonuçları ve SearchFinished olayı düşünün).WPF ItemsControl - öğelerin ne zaman bitip bitmediğini nasıl öğrenirim?

Klavye odağını bir ItemsControl öğesindeki ilk öğeye taşımak istiyorum, ancak SearchFinished'i işlerken View'ın kod arkasında yaptığımda, öğeler henüz oluşturulmadı (koleksiyon zaten dolduruldu, ancak wpf'nin rendering zaman uyumsuz ve henüz gerçekleşmedi), yani odaklanacak hiçbir şey yok (Odak() öğesinin görsel yapısı zaten oluşturulmuş olmalıdır). 0 öğesi henüz yüklü değil olarak

yapmak istediğim (myItemsControl.ItemContainerGenerator.ContainerFromIndex (0) UIElement gibi) .Focus() ;, ama, ContainerFromIndex (0) null döndürür.

Düşük öncelikli Dispatcher.BeginInvoke ile geciktirmeyi denedim, ancak bu tam zamanlamaya bağlı ve genellikle çalışmıyor.

ItemsControl öğesindeki ilk öğeye kadar nasıl bekleyebilirim?

cevap

8

ItemContainerGenerator.StatusChanged olayını ve ardından Status özelliğini kontrol edebilirsiniz. Status == GeneratorStatus.ContainersGenerated ise, ilk kabı güvenli bir şekilde alabilirsiniz.

+0

Teşekkür ederim, bu mükemmel çalışıyor! –