2016-04-26 2 views
3

У меня есть окно, которое имеет несколько различных DataTemplate, которые являются нагрузкой на ContentControl основы на RadioButton (The RadioButton посылает команду на видовой, который устанавливает Content свойства ContentControlWPF -. MVVM DataTemplate нагрузка на память для повторного использования

Он хорошо работает, но теперь несколько представлений содержат «тяжелый» объект (Eyeshot CAD viewer).

Переключение на любой из этих зрения вызывает задержку (в данный момент нет абсолютно нулевой логики во всем программном обеспечении, кроме зрения/просмотреть модель)

Есть ли способ загрузить представление и тяжелый элемент управления в память один раз, а затем повторно использовать его при переключении на его представление? (The ViewModel этой точки зрения в настоящее время является синглтон, но это не поможет)

<DockPanel> 

    <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Height="160" Margin="0,0,0,12"> 
     ... Removed for clarity 
    </StackPanel> 

    <ContentControl x:Name="Tabs" Content="{Binding SelectedTabViewModel}" Margin="0,12,0,12"/> 
</DockPanel> 
+0

Я бы проголосовал за него как дубликат [этого вопроса] (http://stackoverflow.com/q/30033162/1997232), но сам не получаю ответа. То, что я сейчас делаю, ждет первого рендера (который встречается в другом 'ContentControl') перед переключением вида (во время ожидания вы можете показать некоторую анимацию, чтобы развлечь пользователя):' Dispatcher.InvokeAsync (() => ..., DispatcherPriority .Render); '(где' ... 'является частью того, что делает второй' ContentControl' заменяющим первый.). – Sinatr

ответ

0

На вашем DataTemplate, вы можете установить атрибут х: Shared = «True», это позволит повторно использовать рамки визуального (внутри шаблона данных) для другого ContentPresenter.

Это не загружает компонент при запуске, но это повторное его использование после создания экземпляра.

Смежные вопросы