Hallo liebe Gemeinde der Entwickler-Ecke,
ich möchte meine nächste Anwendung in verbindung mit dem MVVM Light Toolkit umsetzen. Der Einstieg fällt einem nicht schwer da es ja mehrere Tutorials im Netz dazu gibt. Ich möchte allerdings jedesmal wenn ich eine View (Fenster) aufrufe das mir eine neue Instanz des zugehörigen ViewModels erstellt wird. Auch dazu gibt es einige Ansätze im Netz allerdings wirken diese nicht recht überzeugend auf mich da es eher Beispiele alla ... ich würde es halt so machen ... sind! Meine Frage ist nun ob jemand mit dem Toolkit bereits eine Anwendung umgesetzt hat bzw. vor dem selben Problem gestanden hat und mir nun sagen kann wie ich am besten vorgehen soll. Oder ist es doch so das man die Instanz des jeweiligen ViewModels über die ganze Laufzeit der Anwendung aufrecht erhalten sollte?
Im Anhang findet Ihr ein Beispielprojekt wie ich es mir vorgestellt bzw. aktuell umgesetzt habe.
Die relevanten Codeteile sind folgende .....
XML-Daten
1: 2: 3: 4: 5: 6:
| DataContext="{Binding PersonViewModel, Source={StaticResource Locator}}"> <interactivity:Interaction.Triggers> <interactivity:EventTrigger EventName="Closing" > <command:EventToCommand Command="{Binding Path=OnClosingCommand}"/> </interactivity:EventTrigger> </interactivity:Interaction.Triggers> |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| public RelayCommand OnClosingCommand => _closingCommand ?? (_closingCommand = new RelayCommand(OnClosing));
private void OnClosing() { SimpleIoc.Default.Unregister<PersonViewModel>(); SimpleIoc.Default.Register<PersonViewModel>(); } |
Bei jedem schließen des Fensters wird das ViewModel entfernt und wieder neu-registriert. Es gibt Ansätze wo beim erzeugen im ViewModelLocator eine eindeutige ID dem jeweiligen ViewModel "mitgegeben" wird und anhand dieser ID genau diese Instanz wieder entfernt wird. Da ich mit sicherheit immer nur eine Instanz benötige galube ich das ich diesen Ansatz nicht verfolgen brauche.
Ich hoffe ich konnte einigermaßen beschreiben um was es mir geht und hoffe das mir jemand den richtigen Weg zeigen kann.
Vielen Dank!