我的视图中有一个 ItemsControl,它绑定到 ViewModel 的 ObservableCollection。集合被填充,然后引发从 VM 到视图的事件(想想搜索结果和 SearchFinished 事件)。
我想将键盘焦点移动到 ItemsControl 中的第一个项目,但是当我在处理 SearchFinished 时在 View 的代码隐藏中执行此操作时,项目尚未呈现(集合已填充,但 wpf 的呈现是异步的并且没有还没有发生),所以没有什么可关注的(Focus() 需要已经构建了项目的可视化树)。
我想做 (myItemsControl.ItemContainerGenerator.ContainerFromIndex(0) as UIElement).Focus();,但由于第 0 个项目尚未加载,ContainerFromIndex(0) 返回 null。
我尝试使用 Dispatcher.BeginInvoke... 以低优先级延迟它,但这取决于确切的时间并且通常不起作用。
如何等到 ItemsControl 中的第一个项目被加载?