2016-04-26 2 views
3

I ont une fenêtre qui possède plusieurs DataTemplate qui sont charge à un ContentControl basé sur un RadioButton (Le RadioButton envoie une commande au modelview qui définit la propriété Content du ContentControlWPF - MVVM DataTemplate charge en mémoire pour une réutilisation

.

Il fonctionne bien, mais maintenant plusieurs vues contiennent un objet « lourd » (Eyeshot CAD viewer).

le passage à l'une de ces vue provoque un retard (en ce moment il n'y a absolument aucune logique dans tout le logiciel autre que la vue/voir le modèle)

Existe-t-il un moyen de charger une fois la vue et le contrôle lourd dans la mémoire, puis de le réutiliser lors du passage à sa vue? (Le ViewModel de ce point de vue est actuellement un singleton, mais cela ne suffit pas)

<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

Je voterais comme doublon de [cette question] (http://stackoverflow.com/q/30033162/1997232), mais je n'ai pas de réponse moi-même. Ce que je fais actuellement attend le premier rendu (qui se produit dans un autre 'ContentControl') avant de changer de vue (pendant l'attente vous pouvez montrer une animation pour amuser l'utilisateur):' Dispatcher.InvokeAsync (() => ..., DispatcherPriority .Render); '(où' ... 'est une partie qui fait que le second' ContentControl' remplace le premier ..). – Sinatr

Répondre

0

Sur votre DataTemplate, vous pouvez définir l'attribut x: Shared = « true », ce qui permettra le cadre de réutiliser le visuel control (à l'intérieur du datatemplate) pour un autre ContentPresenter.

Ceci ne charge pas le composant au démarrage, mais le réutilise une fois instancié.