Come astrarre la transizione tra Views?

3

Il nostro team sta sviluppando un'applicazione che utilizza WPF con MVVM.

Vogliamo rendere ViewModels riutilizzabile. Con questa intenzione vogliamo astrarre la logica di transizione tra Views (ViewModels, usiamo l'approccio ViewModel-first con Caliburn.Micro) in modo che l'altra applicazione possa sovrascriverla.

Ad esempio, abbiamo App1 e App2. In primo luogo, abbiamo sviluppato App1 e ha FooViewModel che crea FunViewModel quando l'utente fa clic su un pulsante Avanti.

Ma, sviluppando App2, vogliamo arrivare a NotFunViewModel invece di FunViewModel quando l'utente fa clic su un pulsante Avanti.

Come realizzare un simile compito? La soluzione deve essere universale e sicura in base ai tipi (in fase di compilazione).

    
posta EngineerSpock 18.12.2013 - 09:56
fonte

2 risposte

4

Di solito uso un ParentViewModel per controllare il flusso dell'applicazione

La versione semplificata di esso in genere appare come segue:

App1ViewModel
{
    BaseViewModel CurrentView { get; set; }
    ICommand NextCommand { get; } <!-- will set CurrentView to FunViewModel -->
}

App2ViewModel
{
    BaseViewModel CurrentView { get; set; }
    ICommand NextCommand { get; } <!-- will set CurrentView to NotFunViewModel -->
}
<ContentControl Content="{Binding CurrentView}" />
<Button Command="{Binding NextCommand}" />
    
risposta data 20.12.2013 - 16:21
fonte
2

Se condividi un ViewModel in due visualizzazioni e si comporterà in modo diverso, sicuramente avrà una sorta di "modalità operativa" commutabile.

Si potrebbe semplicemente introdurre una proprietà bool / enum nel ViewModel e lasciare che le singole Views impostino il proprio valore rispettivamente su Mode1 o Mode2 (in MVVM la View conosce il suo ViewModel, ma non viceversa = > valore potrebbe essere impostato ad esempio in Visualizza XAML).

Quindi l'evento clic sul pulsante o il comando associato può valutare questa modalità: Proprietà per scegliere l'azione giusta.

    
risposta data 20.12.2013 - 10:39
fonte

Leggi altre domande sui tag