Ich habe zwei Bildschirme, die eine Liste von Elementen verwalten müssen. Der Benutzer kann vom ersten Bildschirm zum zweiten Bildschirm navigieren.So verwalten Sie eine Instanz mit einer bestimmten Lebensdauer
Wenn der Benutzer vom ersten Bildschirm zurück navigiert, muss die Liste der Elemente in einem Geschäft gespeichert werden.
Die Art und Weise, wie ich dachte, es zu tun, einen Service zu haben, der die Ansammlung hält, die in die Ansichtmodelle eingespritzt wird. Aber die Service-Instanz muss einmal Benutzer freigegeben wird navigiert zurück vom 1. Bildschirm:
// somewhere, maybe in Application:
LifetimeManager = new ContainerControlledLifetimeManager();
Container.RegisterType<Service>(lifetimeManager);
class FirstPage()
{
ContainerControlledLifetimeManager _lifetimeManager;
public FirstPage()
{
InitializeComponent();
}
void OnDisappearing()
{
LifetimeManager.RemoveValue();
}
}
Aber das scheint ungeschickt, es ein besserer Weg zu sein, hat diese ...
ich ein ExternallyControlledLifetimeManager
sehen, dass es zu tun was scheint, ist es, was ich brauche, aber es würde immer noch für FirstPage
Instanz benötigen, um die Instanz des Managers zu erhalten und RemoveValue
aufrufen. Oder ich würde GC.Collect
auf OnDisappearing
anrufen, um sicherzustellen, dass der GC die Instanz des Dienstes sammelt, und ExternallyControlledLifetimeManager
wird es neu erstellen, wenn es das nächste Mal in dem FirstPageViewModel
injiziert werden muss. Aber GC.Collect
scheint falsch zu sein ...
Die Art, wie Sie versuchen, einen Dienst zu verwenden, macht keinen Sinn. Warum brauchen Sie einen Dienst, der beim Navigieren zu einer Ansicht identisch ist, aber wenn Sie zurück navigieren, muss es anders sein? Ich denke, Sie müssen die Funktion Ihres Dienstes überdenken. –
Danke für das Kommentieren. Der erste Bildschirm erstellt eine Liste von Elementen im Speicher, die der zweite Bildschirm ebenfalls verwenden muss. Sobald der Benutzer vom ersten Bildschirm zurück navigiert, muss die Liste im Repository gespeichert werden. Ich dachte, der Service ist ein guter Weg, um die Liste zwischen den Bildschirm-View-Modellen zu teilen, und ich kenne nicht die richtige Art, wie es mit DI funktionieren sollte. Nicht sicher, aber ich denke, die Liste ist wie eine Sitzung, die das 1. View-Modell erstellt und dann auch von der 2. verwendet werden muss. – JamesL
Ist es besser, statt eines Service eine Kind-View-Model-Instanz zwischen den beiden Screen-View-Modellen zu teilen? Aber ich weiß immer noch nicht, wie ich das mit DI machen soll. – JamesL