WPF ItemsControl的 - 如何知道什么时候该项目完成加载,这样我可以集中的第一个?
-
21-09-2019 - |
题
我有一个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
,那么你就可以放心地拿到第一容器。
不隶属于 StackOverflow