2016-04-18 7 views
1

Ich habe eine Ansicht enthält Teilansichten mit ContentControls ähnlichem Dies funktioniertWiederverwendung Ansicht Instanzen mit Caliburn.Micro

<ContentControl x:Name="DetailView" /> 

bekommt. Wenn ich den Inhalt für das ContentControl zu einem anderen ViewModel ändere, wird es das andere ViewModel laden und anzeigen. Aber wenn ich wieder von ViewModel zurück wechsle, wird es die View-Instanz nicht wiederverwenden, sondern eine neue erstellen. Hinweis: Ich weise keine neue Instanz des ersten ViewModel zu, aber genau die gleiche.

Wie kann ich Caliburn.Micro sagen, um die Instanz der Ansicht von früher wiederzuverwenden, anstatt eine neue Ansichtsinstanz zu erstellen?

Antwort

1

What IoC container Verwenden Sie Instanzen von View und ViewModels zu erstellen?

Erstellen Sie einfach eine einzelne Instanz von <ContentControl/>. Lassen Sie mich zeigen, wie ein Singleton in IoC-Container erstellen Unity:

container.RegisterType<IViewContentControl, ConentControl>(
         new ContainerControlledLifetimeManager()); 

wo ContainerControlledLifetimeManager() bedeutet, dass es nur eine Instanz in den gesamten Lebenszyklus Ihrer Anwendung ist.

+0

Ich verwende den 'SimpleContainer' aus dem Caliburn.Micro-Framework selbst. Ich hatte ViewModels nur noch im Container eingerichtet. Dank Ihrer Eingabe kann ich sehen, dass die View-Modelle auch über den 'IoC'-Container generiert werden können. Also muss ich auch die Ansicht registrieren: 'container.Singleton ();' - aber wenn das ViewModel 'PerRequest' wäre, könnte jedes ViewModel eine' 1: 1'-Beziehung mit einer View haben? – ZoolWay

+0

@ZoolWay Nein, wenn Sie Ihre Ansicht als Singleton registrieren, heißt das nicht, dass das Ansichtsmodell automatisch als Singleton registriert wird. Sie sollten 'viewModel' auch als Singleton registrieren. – StepUp

+0

Vielleicht war ich nicht klar - ich gehe zuerst ViewModel, also habe ich das ViewModel schon als IoC-Singleton definiert und mache das schon eine ganze Weile. Auch die Einrichtung der Ansicht via IoC war der neue Teil für mich;) – ZoolWay