Frage

Ich bin mit MVVM Foundation aber ich denke, es ist ziemlich geradlinig und nicht wirklich Rahmen spezifisch. Mein Setup ist wie folgt:

  • StartViewModel - hat einen Befehl exit, dass die Renditen ein RelayCommand / ICommand

    public ICommand ExitCommand {
        get { return _exitCommand ?? (_exitCommand = new RelayCommand(() => MessageBox.Show("Hello World"))); }
    }
    public RelayCommand _exitCommand;
    
  • Startansicht (User Control) verfügt über eine Taste auf den Befehl exit binded

    <Button Content="Exit" Command="{Binding ExitCommand}" />  
    
War es hilfreich?

Lösung

Zuerst wird, wie viel lesen, wie Sie auf MVVM Magen, z.B. WPF Apps Mit dem Model-View-Viewmodel Design Muster auf MSDN. Sobald Sie die Grundlagen verstehen es die Antwort der Fahrt scheinen mehr zumutbar ist.

Im Grunde wollen Sie die Ansicht (UI) und Ansichtsmodell halten (im Wesentlichen abstraktes UI, sondern auch abstraktes Modell) Schichten trennen und entkoppelt. Es werden ein Meldungsfeld oder Schließen eines Fensters sollte ein UI beschreiben und daher implementiert in der Ansicht, oder im Falle eines Meldungsfeld mehr allgemein zugänglich über einen ‚Service‘ in Betracht gezogen werden.

Im Hinblick auf das Ansichtsmodell wird dies erreicht, indem Inversion of Control (IOK). Nehmen Sie die Nachrichtenbox Beispiel oben. Anstatt zeigt das Meldungsfeld selbst, dauert es eine Abhängigkeit von einem IMessageBoxService, die eine Show-Methode hat und das Viewmodel fordert, dass statt - Übertragung von Verantwortung. Diese ergriffen werden könnten, weiter durch den Einsatz von Dependency Injection (DI) Containern.

Ein weiterer Ansatz zum Schließen eines View-Fenster verwendet werden könnte, für das Ansichtsmodell ein Ereignis zu belichten, zum Beispiel RequestClose genannt (wie im MSDN-Artikel), dass die Ansicht abonniert. Dann würde das Ansichtsmodell das Ereignis auslösen, wenn sie die entsprechende Ansicht / Fenster zu schließen will; nimmt etwas anderes hört und Verantwortung übernehmen und es tatsächlich tun.

Andere Tipps

Sie können eine Closeevent in Ihrem StartViewModel implementieren. in Ihrer Startansicht müssen Sie diese registrieren Closeevent. wenn Sie Ihren closeevent aus Ihrem VM Raise dann, Ihre Ansicht erkennen, dass es Ihre app / Fenster schließen hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top