WPF + Caliburn Micro: Wie wird das Ereignis "Fenster schließen" erfasst?

8

Ich bin neu in Caliburn Micro und lerne es aus diesem Helloworld-Beispiel . Im Beispiel gibt es nur 2 Ansichten (.xaml) vom Typ Application und UserControl und 1 View Model.

Ich vermeide es, Code dahinter zu verwenden. Daher habe ich nur Modell ansehen und ansehen. Ich möchte wissen, wie das Fenster schließen Ereignis meiner Helloworld-Anwendung zu fangen , damit ich es im View-Modell behandeln kann. Mein Ziel: Wenn der Benutzer die App schließen will, indem er die [x] -Taste in der oberen rechten Ecke drückt, gibt die App dem Benutzer eine Rückmeldung.
Ich habe über IViewAware und IScreen gelesen, aber ich finde kein spezifisches Beispiel für meine Frage.

Ein einfacher Beispielcode für das Ansichts- und Ansichtsmodell wird sehr geschätzt. Vielen Dank im Voraus.

PS. Ich benutze VS2013, C #.

    
MagB 11.07.2014, 14:21
quelle

3 Antworten

8

Was Sie tun können, ist in Ihrem View , dass Sie Caliburn Micro mit

anhängen können %Vor%

So wird es aussehen

%Vor%

Und auf Ihrem ViewModel können Sie einfach eine öffentliche Methode definieren, die OnClose mit CancelEventArgs als Parameter angibt und Sie können von dort aus damit umgehen.

    
123 456 789 0 11.07.2014, 14:43
quelle
2

Wenn Ihr ViewModel den Bildschirm erbt, verfügt Caliburn Micro über einige Methoden, die Sie wie

überschreiben können %Vor%

wird aufgerufen, wenn ein Bildschirm geschlossen oder deaktiviert wird oder

%Vor%

Sie können die Verwendung von CanClose hier

überprüfen     
gcores 11.07.2014 15:18
quelle
1

Sie suchen nach einer Möglichkeit, ein Ereignis an einen Befehl zu binden. Der typische Ansatz besteht darin, das Verhalten EventToCommand von MVVMLight zu verwenden.

Beispielverwendung (aus dem verknüpften Artikel):

%Vor%

Für Ihr spezifisches Szenario verwenden Sie MVVMLight nicht. Da dieses Framework open-source ist, könnten Sie die Implementierung von EventToCommand in Ihr eigenes Projekt kopieren, oder - einfacher - Sie können das InvokeCommandAction , das Teil der Bibliothek System.Windows.Interactivity.dll ist, die in Expression Blend enthalten ist.

Beispiel für InvokeCommandAction:

%Vor%

Schließlich wurde das gesamte MVVM-Dogma, dass Sie "keinen Code hinter sich haben können" abgeschossen Zeit | und | Zeit erneut (der letzte Link ist besonders relevant). MVVM soll Unit-testable sein und trennt die "View-Logik" von der "Business-Logik". Das "Schließen" -Ereignis ist zugegebenermaßen ein bisschen eine Grauzone zwischen Ansichts- und Geschäftslogik. Aber wenn Sie in Ihrem Code einen Event-Handler hinterlegen können, der die entsprechende Methode oder den Befehl Ihres ViewModels aufruft, und Sie diesen Code Unit-Test testen können, dann sind Sie so gut wie Gold. Mach dir keine Sorgen darüber, alle Spuren von Code-Behind aus deinem Projekt zu entfernen.

    
BTownTKD 11.07.2014 14:25
quelle

Tags und Links