WPF Items - wie Sie wissen, wenn die Einzelteile fertig geladen, so dass ich die ersten konzentrieren können?
-
21-09-2019 - |
Frage
Ich habe ein Itemscontrol in meiner Ansicht, die zu einer ObservableCollection von Viewmodel gebunden ist. Die Sammlung wird gefüllt, und danach ein Ereignis von VM Ansicht wird (man denke Ergebnisse Suche und SearchFinished Ereignis) angehoben.
Ich mag Tastaturfokus auf das erste Element in einem Itemscontrol bewegen, aber wenn ich es in Ansicht der Code-Behind tun, wenn SearchFinished Handhabung, werden die Elemente noch nicht gemacht (die Sammlung bereits gefüllt ist, aber wpf Die Wiedergabe ist asynchron und ist nicht geschehen noch) nicht, so gibt es nichts zu konzentrieren (focus () muss den Artikel visuelle Struktur bereits aufgebaut hat).
wollte ich (myItemsControl.ItemContainerGenerator.ContainerFromIndex (0) als UIElement) .Focus () tun ;, sondern als das 0-te Element ist noch nicht geladen, ContainerFromIndex (0) gibt null.
Ich habe versucht, es mit Dispatcher.BeginInvoke ... mit niedriger Priorität zu verzögern, aber das ist abhängig von den genauen Zeitpunkt und in der Regel nicht funktioniert.
Wie kann ich warten, bis das erste Element in Itemscontrol geladen wird?
Lösung
Sie können das ItemContainerGenerator.StatusChanged
Ereignis verwenden, und dann seine Status
Eigenschaft überprüfen. Wenn die Status == GeneratorStatus.ContainersGenerated
, dann können Sie sicher den ersten Behälter bekommen.