Quali sono le regole per l'accoppiamento di un ViewModel e di una vista nel pattern MVVM?

6

Quindi, data la Separazione delle preoccupazioni , in che modo la vista e il ViewModel dovrebbero essere accoppiati?

Ad esempio, voglio che la visibilità di un controllo nella vista sia di tipo databound (definito in base a?) su un flag nel ViewModel.

La mia prima impressione sarebbe di usare un valore booleano, IsControlVisible che restituisce vero / falso. Tuttavia, nella Vista, la visibilità è impostata da un Enum.

Quindi ho una scelta: cambia la proprietà in Enum, o usa un Convertitore per convertire il bool in Visibility Enum.

Qual è l'approccio corretto quando si cerca di seguire MVVM idiomatico?

    
posta Alan 15.06.2011 - 19:40
fonte

3 risposte

7

Se il modello di vista riguarda solo un controllo visibile o collassato, lo trasformo in booleano e utilizzo un convertitore di valori. Se il View-Model ha anche bisogno di comunicare lo stato nascosto, allora lo farei enum (e probabilmente userò l'enumerazione Visibility).

Quindi per rispondere alla tua domanda, vorrei che il View-Model esprimesse ciò di cui ha bisogno (visibile / compresso o visibile / collassato / nascosto) e adattare la Vista per adattarsi al convertitore di valori. Altri casi possono variare, come per la maggior parte delle cose.

    
risposta data 15.06.2011 - 19:46
fonte
5

La domanda che devi porre è "perché questo widget è nascosto?"

Se la risposta è perché non è disponibile, la proprietà VM dovrebbe probabilmente essere una bool chiamata IsAvailable . Se è perché alcune altre proprietà hanno o non hanno un valore particolare, fallo con IValueConverter .

Il concetto generale è che la VM detiene lo stato concettuale del sistema e la vista decide come rappresentarla visivamente.

    
risposta data 15.06.2011 - 19:56
fonte
2

Il tuo ViewModel potrebbe esporre proprietà di tipo Visibility invece di un bool e collegarsi direttamente a questo.

    
risposta data 16.06.2011 - 02:17
fonte

Leggi altre domande sui tag