UserControl对象的缓存



我有一个WPF应用程序,在其中我显示和隐藏了许多UserControl对象。XAML代码如下所示:

<ItemsControl ItemsSource="{Binding Path=MyListOfStuff}" >
    <Controls:MyControl Stuff="{Binding}"/>
</ItemsControl>

创建这些对象需要花费大量时间。分析显示"InitializeComponent"为MyControl对象花费了大量时间。我想预先创建这些对象以减少时间。我该怎么做?我仍然需要xaml代码,不想用代码替换所有代码。

不可能使用虚拟化,因为列表中的项目有时比视图大,所以CanContentScroll必须为False。

有两个方面可以解决您的问题。甚至你可以同时使用它们。。

  1. UI虚拟化
  2. 数据虚拟化

你应该看看

http://blogs.microsoft.co.il/blogs/tomershamam/archive/2009/10/01/ui-virtualization-vs-data-virtualization-part-2.aspx

此外,如果您使用的是.net 4.0,您可以使用Lazy类来轻松支持数据虚拟化,否则您将不得不创建一些类来支持它。

谨致问候。

在WPF中进行UI缓存是可能的,但我确信这不是您想要的。

位图缓存在一个视觉对象绘制多次时非常有用,因此它只渲染一次,而后续渲染仅从缓存中复制。

您必须了解虚拟化(请参阅Shoaib的回答)。

关于位图缓存的文章。

最新更新