WPF ItemsControlには - の項目のロードが終了したときにどのように私は最初のものの焦点を合わせることができるように、知っていますか?

StackOverflow https://stackoverflow.com/questions/2492214

質問

私は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場合は、安全第一の容器を得ることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top