2009-08-25 13 views
10

Sto lavorando a una nuova applicazione WPF e sto cercando di rimanere il più vicino possibile al pattern MVVM. I miei file XAML adesso non hanno codebehinds e tutta la mia interattività viene raggiunta usando la classe RelayCommand di Josh Smith e i comandi nelle mie classi ViewModel.Apertura di una casella about MVVM

Questo ha funzionato benissimo fino a quando non ho iniziato a lavorare sulle attività di manutenzione, come ad esempio una scatola e una pagina delle preferenze di sistema. Voglio avere questi come finestre di dialogo modali, ma se creo un RelayCommand per aprire queste pagine, creerò una dipendenza dalla vista all'interno del mio modello di vista.

Questo mi colpisce rispetto alla grana del pattern MVVM.

Esiste un metodo stabilito per la creazione di nuove finestre (modali e/o non modali) all'interno del pattern MVVM senza creare una dipendenza? Sembra che l'unico modo per mantenere pulito ViewModel sia creare un gestore di eventi Click nel file codebehind di XAML e creare la nuova vista all'interno della vecchia visualizzazione.

Qualche consiglio?

risposta

7

Un modo per gestire questo è implementare un servizio che fornisce Views to ViewModels. Le viste si registrano con il servizio e ViewModels può richiedere le finestre di dialogo dal servizio. Questo è un esempio di Gang of Four mediator pattern.

0

Vedere la risposta a this question sul motivo per cui la classe Window stessa è un ViewModel, quindi è possibile utilizzarlo direttamente dal ViewModel senza preoccupazioni.

0

Laurent Bugnion ha un mediatore con riferimenti deboli, in cui lo utilizza per mostrare i messaggi di dialogo. Insieme al messaggio trasmesso, viene inviato un delegato di richiamata per l'esecuzione dell'utente. Potresti usare lo stesso concetto per mostrare una finestra di dialogo. Controlla DialogMessage.cs from the source here.

0

Utilizziamo le classi controller che sono responsabili del flusso di lavoro dell'interfaccia utente. Creano le finestre modali e mediano tra i vari ViewModels.

Come si può aprire una finestra modale con il (MVVM) modello ViewModel-ViewModel è mostrato in l'applicazione di esempio ViewModel qui:

WPF Application Framework (WAF)

http://waf.codeplex.com

Problemi correlati