Frage

In meiner Bewerbung habe ich einen Hauptwindow, den ich über mefedMvvm the ViewModel importiert habe:

xmlns:mefed="clr-namespace:MEFedMVVM.ViewModelLocator;assembly=MEFedMVVM.WPF"
mefed:ViewModelLocator.ViewModel="MainViewModel"

Und jetzt habe ich auch mein ViewModel, das das ViewModel erkennt:

[ExportViewModel("MainViewModel")]
public class MainViewModel: ViewModelBase

In meinem ViewModel habe ich eine sympathische Eigenschaft zum Schließen des Fensters. Die Veranstaltung zum Schließen kann von überall kommen. Und mit Hilfe des Cinch Framework 2.0 realisiere ich einen einfachen mit Ausführungsmethode.

Frage

Wie kann ich das Fenster von meiner ausführenden Methode aus schließen? Über die Abhängigkeitsinjektion habe ich keinen Konstruktor. Ich kann kein Ereignis registrieren oder die Ansicht als Parameter für das ViewModel angeben.

Bearbeiten

Eine Möglichkeit, die ich jedoch nicht schön halte:

Nennen Sie dies in der Methode

Application.Current.MainWindow.Close()
War es hilfreich?

Lösung

Sie können dies erreichen, indem Sie eine schreiben ICommand das passt an Window Instanz als Parameter.

Ein gutes Beispiel ist hier erhältlich: Wie kann ich allen WPF-Fenstern innerhalb eines Projekts das Verhalten "Close on Escape-Key Press" zuweisen?

In diesem Beitrag die ICommand ist schließlich an a gebunden KeyBinding (Damit die Escape -Taste verwendet werden kann, um das Fenster zu schließen. Der wichtige Teil ist, a zu verwenden RelativeSource Auf Ihrem Befehlsparameterbindung an die Referenz auf die Window dass du schließen willst

Bearbeiten Sie als Antwort auf Kommentare

Der Befehl ist ein Singleton, aber es ist nicht erforderlich, dass er es ist - es ist nur ein Singleton, weil er Staatenlos ist und die Bindung erleichtert. Es erwirbt einen Verweis auf die Window durch Bindung, also für a UserControl Sie können nur verwenden:

<Button Command="{x:Static mynamespace:CloseWindowCommand.Instance}"
    CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" Content="Close My Parent Window" />

Es ist etwas komplizierter und benötigt einen anderen Ansatz. Ein gutes Beispiel finden Sie hier: http://gallery.expression.microsoft.com/windowclosebehavior

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