WPF ItemsControl - Wie erfahre ich, wann die Elemente geladen wurden, damit ich mich auf das erste konzentrieren kann?

Ich habe ein ItemsControl in meiner Ansicht, das an eine ObservableCollection von ViewModel gebunden ist. Die Sammlung wird gefüllt, und anschließend wird ein Ereignis von der VM zur Anzeige ausgelöst (siehe Suchergebnisse und SearchFinished-Ereignis).

Ich möchte den Tastaturfokus auf das erste Element in einem ItemsControl verschieben, aber wenn ich dies im CodeBehind von View bei der Behandlung von SearchFinished tue, werden die Elemente noch nicht gerendert (die Auflistung ist bereits gefüllt, aber das Rendern von wpf ist asynchron und funktioniert nicht). Es gibt also noch nichts zu fokussieren (Focus () muss den visuellen Baum der Objekte bereits erstellt haben).

Ich wollte (myItemsControl.ItemContainerGenerator.ContainerFromIndex (0) als UIElement) .Focus (); tun, aber da das 0. Element noch nicht geladen ist, gibt ContainerFromIndex (0) null zurück.

Ich habe versucht, es mit Dispatcher.BeginInvoke zu verzögern ... mit niedriger Priorität, aber das hängt vom genauen Timing ab und funktioniert normalerweise nicht.

Wie kann ich warten, bis das erste Element in ItemsControl geladen ist?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage