2010-03-22 30 views
6

Tôi có một ItemsControl trong dạng xem của tôi, được gắn với một ObservableCollection từ ViewModel. Bộ sưu tập được lấp đầy, và sau đó một sự kiện từ VM để xem được nâng lên (nghĩ kết quả tìm kiếm và sự kiện SearchFinished).WPF ItemsControl - làm thế nào để biết khi nào các vật phẩm được tải xong, để tôi có thể lấy nét đầu tiên?

Tôi muốn di chuyển tiêu điểm bàn phím sang mục đầu tiên trong một ItemsControl, nhưng khi tôi làm điều đó trong mã của View sau khi xử lý SearchFinished, các mục chưa được hiển thị (bộ sưu tập đã được lấp đầy, nhưng kết xuất của wpf là không đồng bộ và đã không xảy ra), vì vậy không có gì để tập trung (Focus() cần phải có cây thị giác của các mặt hàng đã được xây dựng).

Tôi muốn thực hiện (myItemsControl.ItemContainerGenerator.ContainerFromIndex (0) dưới dạng UIElement) .Focus() ;, nhưng vì mục thứ 0 chưa được tải, ContainerFromIndex (0) trả về giá trị rỗng.

Tôi đã thử trì hoãn nó với Dispatcher.BeginInvoke ... với mức ưu tiên thấp, nhưng điều đó phụ thuộc vào thời gian chính xác và thường không hoạt động.

Làm cách nào tôi có thể đợi cho đến khi mục đầu tiên trong ItemsControl được tải?

Trả lời

8

Bạn có thể sử dụng sự kiện ItemContainerGenerator.StatusChanged và sau đó kiểm tra thuộc tính Status của nó. Nếu số Status == GeneratorStatus.ContainersGenerated thì bạn có thể nhận được thùng chứa đầu tiên một cách an toàn.

+0

Cảm ơn bạn, điều này hoạt động hoàn hảo! –

Các vấn đề liên quan