WPF ItemsControlには - の項目のロードが終了したときにどのように私は最初のものの焦点を合わせることができるように、知っていますか?
-
21-09-2019 - |
質問
私はViewModelにからのObservableCollectionにバインドされている私のビューでのItemsControlを、持っています。コレクションが充填されており、その後のビューへのVMからイベントが(検索結果を考えると、イベントをSearchFinished)が発生します。
私はItemsControlにの最初の項目にキーボードフォーカスを移動したいと思いますが、私はビューのコードビハインドでそれを行う際にSearchFinished取り扱う場合は、アイテムがまだレンダリングされません(コレクションがすでに満たされているが、WPFのレンダリングは非同期ですそして、)まだ起きていなかったので、焦点に何が既に構築アイテムのビジュアルツリーを)持っている(フォーカス()ニーズは存在しません。
私は.Focus()(UIElementのようmyItemsControl.ItemContainerGenerator.ContainerFromIndex(0))をやってみたかった;,が、0番目の項目がまだロードされていないとして、ContainerFromIndex(0)がヌルを返します。
私は優先度の低い... Dispatcher.BeginInvokeでそれを遅らせる試みたが、それは正確なタイミングに依存し、通常の仕事はしません。
ItemsControlの内の最初の項目がロードされるまで、どのように私は待つことができますか?
解決
あなたはItemContainerGenerator.StatusChanged
イベントを使用して、そのStatus
プロパティを確認することができます。 Status == GeneratorStatus.ContainersGenerated
場合は、安全第一の容器を得ることができます。