WPF ItemsControl的 - 如何知道什么时候该项目完成加载,这样我可以集中的第一个?

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

我有一个ItemsControl在我的视图,被绑定到视图模型从一个ObservableCollection。集合被填充,事后从VM到视图引发事件(认为搜索结果和SearchFinished事件)。

我想键盘焦点移动到第一个项目在一个ItemsControl,但是当我处理SearchFinished时做在查看的代码隐藏,该项目尚未呈现(集已经填满,但WPF的渲染是异步并且还不发生),因此没有将焦点(对焦()需要有项目的视觉树已建成)。

我想要做(myItemsControl.ItemContainerGenerator.ContainerFromIndex(0)作为的UIElement).Focus();但作为第0项目还没有加载,ContainerFromIndex(0)返回NULL。

我试图与Dispatcher.BeginInvoke延缓它...具有低优先级,但这取决于确切时间,并且通常不起作用。

我怎样才能等到ItemsControl中的第一个项目是装的?

有帮助吗?

解决方案

您可以使用ItemContainerGenerator.StatusChanged事件,然后检查其Status属性。如果Status == GeneratorStatus.ContainersGenerated,那么你就可以放心地拿到第一容器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top