So erhalten Sie DialogResult mit mvvm-light Messenger

8

Ich versuche, die Funktion mvvm-light messenger zu verwenden, um ein benutzerdefiniertes Bestätigungsdialogfeld in meiner Ansicht zu öffnen, ausgelöst durch einen Befehl in meinem Ansichtsmodell.

Ich denke, ich verstehe die Verwendung von Messenger.Default.Register und Messenger.Default.Send .

Aber wie bekomme ich die Dialogergebnisse zurück in meinem Viewmodel?

Für mich scheint das Senden eine Einbahnstraße zu sein ...

Könnte jemand einem Anfänger mit einem kleinen C # / WPF-Codebeispiel helfen?

Danke für jede Hilfe

    
nabulke 22.06.2011, 13:16
quelle

3 Antworten

15

IMHO ist es besser, das NotificationMessageAction<T> zu verwenden, wie es für diese Aufgabe ausgeschnitten ist.

Auf der Senderseite:

%Vor%

Und auf der Empfängerseite:

%Vor%

Ich glaube, dass dieser Ansatz sauberer ist, da er keine unnötige Abhängigkeit von der View zum ViewModel erzeugt (obwohl dieser Weg nicht so schlecht ist). Zur besseren Lesbarkeit sollten Sie die NodificationMessageAction<MessageResult> unterteilen. Ie.

%Vor%

Dann der Absender

%Vor%

und Empfängerseite

%Vor%

wird viel klarer.

Und sehr wichtig heben Sie die Registrierung des Empfängers auf, da sonst möglicherweise ein Speicherleck entsteht.

    
AxelEckenberger 22.06.2011, 15:00
quelle
1

In der Methode "Register" können Sie einen Dialog anzeigen und die YourViewModel-Referenz übergeben.

%Vor%

irgendwo in Ihrem Code können Sie senden () Nachricht mit einem Verweis auf YourViewModel wie folgt:

%Vor%     
Arseny 22.06.2011 13:52
quelle
0

Um das oben genannte mit DialogMessage zu erreichen, wie der Titel es vorschlägt, man kann folgendes verwenden:

Absenderseite:

%Vor%

Empfängerseite:

%Vor%

Beachten Sie den expliziten Aufruf der Rückrufmethode in der letzten Zeile des Empfängers.

%Vor%     
TomerBu 10.12.2013 12:14
quelle

Tags und Links