WPF ItemsControl - 如何知道项目何时完成加载,以便我可以集中第一个?

问题描述:

我在View中有一个ItemsControl,它绑定到ViewModel的ObservableCollection。该集合被填充,然后从VM中引发一个事件进行查看(认为搜索结果和SearchFinished事件)。WPF ItemsControl - 如何知道项目何时完成加载,以便我可以集中第一个?

我想将键盘焦点移动到ItemsControl中的第一项,但是当我在处理SearchFinished时在View的代码隐藏中执行它时,项目尚未渲染(集合已经填充,但wpf的渲染是异步,并没有发生),所以没有什么可以关注的(Focus()需要让项目的可视化树已经构建完成)。我想做(myItemsControl.ItemContainerGenerator.ContainerFromIndex(0)作为UIElement).Focus();,但作为第零项尚未加载,ContainerFromIndex(0)返回null。

我试图用Dispatcher.BeginInvoke ...延迟它与低优先级,但这是依赖于确切的时间,通常不起作用。

我该如何等待ItemsControl中的第一项加载?

您可以使用ItemContainerGenerator.StatusChanged事件,然后检查其Status属性。如果Status == GeneratorStatus.ContainersGenerated,那么你可以安全地获得第一个容器。

+0

谢谢,这个作品完美! – 2010-03-22 13:58:39