Кэширование объектов UserControl - PullRequest
2 голосов
/ 10 января 2012

У меня есть приложение WPF, в котором я показываю и скрываю множество объектов UserControl. Код XAML выглядит примерно так:

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

Создание этих объектов занимает много времени. Профилирование показывает, что «InitializeComponent» занимает значительное время для объектов MyControl. Я хочу предварительно создать эти объекты, чтобы сократить это время. Как я могу это сделать? Мне все еще нужен код xaml, и я не хочу заменять его просто кодом.

Невозможно использовать виртуализацию, поскольку элементы в списке иногда больше, чем представление, поэтому CanContentScroll должен иметь значение False.

Ответы [ 2 ]

1 голос
/ 10 января 2012

Можно выполнять кэширование пользовательского интерфейса в WPF, но я совершенно уверен, что это не то, что вы ищете.

Кэширование растрового изображения полезно, когда один визуальный элемент отображается более одного раза, поэтомувизуализируется только один раз, а для последующих визуализаций только копируется из кэша.

Вам нужно будет взглянуть на виртуализацию (см. ответ Shoaib).

Статья о кэшировании растровых изображений .

1 голос
/ 10 января 2012

Есть два аспекта, чтобы решить вашу проблему. даже вы можете использовать оба из них ..

  1. Виртуализация пользовательского интерфейса
  2. Виртуализация данных

Вы должны взглянуть на

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

также если вы используете .net 4.0, вы можете легко использовать класс Lazy для поддержки виртуализации данных, в противном случае вам придется создать несколько классов для поддержки этого.

Привет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...