如何预渲染视图?

And*_*dyC 5 wpf xaml

我的ViewModel根据用户单击选择一个视图。其中一个视图包含许多可视元素-带有数据模板的视图模型包含带有数据模板的视图模型,每个视图都使用背景imagebrush在画布上渲染。完整视图以大约100个这些画布笔刷结束,每个画布笔刷都叠加有十二个椭圆,整个视图位于一个可滚动的视图框中。

首次创建此视图时,用户单击它,然后在全部渲染后会徘徊一段时间。我想更早地完成此渲染-例如在启动过程中。我已经创建了视图对象,但是当用户单击时,渲染完成后我们仍然在徘徊。

有什么方法可以让WPF / xaml进行预渲染,从而使点击响应更好?

小智 4

据我所知,您正在使用 MVVM 模式。我会尝试以下方法:

在启动期间创建视图并将其设置DataContext为您的视图模型实例。然后模拟 WPF 执行的工作。视图上的调用Measure()Arrange()方法强制 WPF 更新数据绑定并生成可视化树。

但只有一个 UI 线程。因此,此时再次阻止您的启动例程。您可以通过将“工作”分成更小的部分来避免这种情况。也许您的视图模型中有一些项目集合。然后,您可以使用DipatcherTimer并在每个步骤中向集合中添加一些合理数量的项目,并在每次迭代后调用 Measure 和 Arrange 来更新视图的可视化树。视图完全初始化后,渲染不应再阻塞。