Domanda

Sto costruendo un'applicazione WPF e cercando di conformarsi alle MVVM migliori pratiche. Sto usando il framework MVVM Fondazione e notato la Messenger classe , che ho letto dovrebbe essere utilizzato per < a href = "https://stackoverflow.com/questions/454868/handling-dialogs-in-wpf-with-mvvm"> movimentazione finestre di dialogo in WPF . Questo suona alla grande, ma io non sono totalmente capire come utilizzare un messaggero per questo scopo. Letteralmente, tutto quello che voglio fare è aprire una finestra di dialogo modale Chi --I non hanno bisogno di passare eventuali messaggi avanti e indietro.

era l'intento della classe Messenger da utilizzare per i casi in cui le finestre di dialogo richiedono un messaggio dal suo genitore, o di restituire un messaggio al suo genitore? E 'eccessivo per un dialogo proposito? Sarei meglio la semplice aggiunta di codice a un gestore di eventi per mostrare la finestra di dialogo?

È stato utile?

Soluzione

L'idea alla base del modello di messaggistica non ha specificamente a che fare con che mostrano le finestre di dialogo. L'idea è semplicemente quello di fornire un modo disaccoppiato per comunicare tra ViewModel.

È possibile sfruttare questa infrastruttura per risolvere il tuo problema, ma si dovrà implementare la proiezione della finestra di te stesso.

Come Phillip mostrato sopra è possibile inviare messaggi tra ViewModel. Quando il vostro ViewModel riceve il messaggio può impostare il proprio proprietà interna, dire "ShowDialog", a true.

Si può quindi avere un legame che reagisce a questa operazione di cambiamento di proprietà e si apre una finestra di dialogo.

Ho anche costruito un framework di messaggistica semplice per il modello MVVM che prende in prestito da un'idea di Josh (e diversi altri quadri esistenti) si può leggere su di esso qui

Altri suggerimenti

Diciamo che avete un vista padre e una vista finestra di dialogo. In MVVM avrebbero entrambi hanno un modello di vista. E 'bene tenere questi modelli vista disaccoppiati, vale a dire che non hanno riferimenti a vicenda. E tuttavia hanno bisogno di comunicare gli uni agli altri. La classe Messenger funge da tramite tra il mediatore o di mediare la comunicazione di informazioni tra le due classi. Vedere il codice preso da blog di Josh .

alt text

Ecco Oggetto A. E 'chiamata al metodo Register del mediatore implementa: quando ricevo il messaggio ObjectBSaidSomething, dal mediatore, io Caché nelle WhatObjectBSays membri

.

alt text

Qui è oggetto B, che implementa: ho intenzione di inviare un messaggio ObjectBSaidSomething. Si noti che l'oggetto B non sa nulla di oggetto A. Ci potrebbe essere niente di ascolto per ObjectBSaidSomething, o 100 oggetti di ascolto per ObjectBSaidSomething, ma l'oggetto B non conosce e non si cura. Questo è un bene disaccoppiamento, e questo è il motivo per cui il modello di mediatore è una buona idea. E questo è il modo in cui la fondazione MVVM raccomanda che l'informazione è passata tra i modelli di visualizzazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top