Come utilizzare un MessageBox utilizzando lo schema MVVM?

4

Sto implementando un'applicazione UI utilizzando il MVVM modello di progettazione.

Il fatto è che, a volte, quando rilevi che qualcosa non funziona con i dati immessi dall'utente, vorresti avvisarlo in qualche modo.

La soluzione che ho usato finora era avere un "framework di messaggistica" che mi permettesse di mostrare fondamentalmente i messaggi in un ListView che integro all'interno della finestra.

Tuttavia, a volte le finestre diventano un po '"sovraccaricate" con elementi grafici e vorrei poter mostrare i messaggi in una finestra di messaggio (in pratica una finestra modale).

Poiché il ViewModel non dovrebbe essere a conoscenza di qualcosa sull'interfaccia utente, non posso istanziare nessuna finestra "esplicitamente".

Idealmente, questa finestra modale userebbe anche il pattern MVVM e quindi implementerei un ViewModel per quella finestra, che verrebbe istanziato all'interno del ViewModel della finestra "principale" e passato alla finestra modale attraverso la% % co_de.

Mi piacerebbe avere un "semplice" esempio di come fare una cosa del genere? O questo approccio dovrebbe essere bandito da un'applicazione MVVM?

Modifica :

L'uso del Unity Framework dovrebbe essere qualcosa che consigli?

    
posta SRKX 23.01.2012 - 20:55
fonte

3 risposte

4

Rendila parte del tuo sistema di messaggistica. Cioè, il tuo messaggio potrebbe avere un attributo come UserMustAcknowledge . Quando il View del framework di messaggistica lo vede, dà il via a una finestra di messaggio.

    
risposta data 23.01.2012 - 21:02
fonte
3

Cinch implementa un servizio di casella di messaggi (tra gli altri) che può essere deriso per scopi di test unitari (o completamente sostituito da qualcos'altro). Questo è quello che abbiamo usato negli ultimi mesi. ViewModel richiede in qualche modo qualcosa di specifico per l'interfaccia utente, ma in realtà non sa come verrà presentato all'utente e non "parlerà" direttamente con i controlli dell'interfaccia utente (WPF). Ho visto un paio di altri framework MVVM che adottano un approccio simile.

L'unità è per l'iniezione di dipendenza (principalmente). Cinch usa MEF. Non che tu ne abbia effettivamente bisogno - Il pattern MVVM non si basa su questo, anche se alcuni framework lo fanno.

    
risposta data 24.01.2012 - 13:31
fonte
0

Potresti generare un comando personalizzato, ad esempio AlertUserCommand, quindi avere uno o più dei tuoi modelli di visualizzazione implementare il comando.

Il comando dovrà essere implementato nel tuo modello di visualizzazione principale.

L'implementazione del comando può essere qualsiasi cosa, dal richiamo della finestra di dialogo del messaggio di sistema alla creazione di una vista personalizzata del messaggio + all'impostazione del suo datacontext o all'impostazione di una proprietà sul modello di visualizzazione a cui qualcosa nella vista corrente è associato (ad esempio una casella di riepilogo o barra di stato).

Puoi sovrascrivere il comando nei modelli con vista inferiore se desiderano un diverso tipo di avviso, ad es. visualizza nel controllo corrente invece di dove vm principale lo mostra.

Potresti usare i parametri del comando per specificare la gravità e fare in modo che l'implementazione del comando dipenda dalla gravità o impostare una proprietà vm con la severità.

    
risposta data 24.01.2012 - 14:49
fonte

Leggi altre domande sui tag