View Full Version : [WP7 - MVVM] - Lazy loading di parti della pagina (pivot)
Kralizek
19-01-2012, 08:09
Mettiamo che ho un controllo pivot composto da due "tab" ciascuna contenente dei dati onerosi da elaborare (diciamo una chiamata ad un web service).
Con un approccio tradizionale, attraverso l'evento SelectionChanged é possibile caricare il contenuto della tab solo quando questa é effettivamente richiesta.
Ora sto provando a portare lo stesso behavior in un contesto MVVM. Il problema é che, per come le guide presentano il pattern, il view model é giá interametne popolato nel costruttore.
Sbaglio qualcosa?
Kralizek
20-01-2012, 18:09
Nessuno?
Si fa.
metti per ipotesi che a seguito della selezione utente di una combobox devi fare una richiesta web con la quale popolare un altro controllo destinazione.
Il binding del selected Item del combobox punta ad una proprieta' del ViewModel.
Nel setter della proprieta' fai partire un thread, oppure una semplice Action che e' piu' semplice.
Il body della Action (o del Thread) andra' ad interrogare il webservice, utilizzando ovviamente il valore del selectedItem, e andra' a popolare la proprieta' destinazione che sara' oggetto di binding del controllo destinazione.
Il tutto senza scomodare Invoke o BeginInvoke di sincronismo, in quanto fra l'altro se le cose sono fatte come pattern comanda il ViewModel non ha alcuna conoscenza della View che ne fa uso, ne tantomento conosce quindi concetti come Invoke o BeginInvoke.
Se il controllo destinazione fosse una collezione, le cose sono un tantino piu' complicate perche' la ObservableCollection e' un oggetto View, e non permette l'inserimento/ aggiornamento a partire da un Thread diverso da quello che l'ha creato.
PS: Non so se quanto sto descrivendo sia compatibile con WP7. Di sicuro lo e' con WPF, e non vedo perche' non potrebbe esserlo.
Se il WebService istanziato nel ViewModel e' in realta' l'interfaccia che lo descrive, allora potrai usare il ViewModel in fase di test, iniettando di volta in volta i possibili valori di test cui il viewModel sara' sottoposto.
Che e' poi uno dei concetti principali di MVVM, ovvero essere in grado di testare la logica (ViewModel) a prescindere dallo strato di presentazione (view), che non sara' neppure istanziato in fase di test.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.