20 messaggi dal 30 maggio 2007
Salve, dovendo realizzare una applicazione per la gestione via usb di uno o più dispositivi ho pensato di provare ad utilizzare MVVM.
L'applicazione si compone di un managerViewModel e di tanti deviceViewModel quanti sono i dispositivi connessi. Ogni dispositivo, essendo piuttosto complesso, si compone di altri viewModel (che chiamo Shell per farmi capire) ognuno dei quali deve gestire parecchi comandi e proprietà bindabili, più alcuni threads (dato che lo stato dello strumento deve essere continuamente monitorato in background).

Per ora ho fatto così:
Quando viene rilevata una connessione il managerViewModel crea un nuovo deviceViewModel (il quale a sua volta crea nel suo costruttore una nuova connection (che è l'istanza readonly del dispositivo connesso), mette il riferimento del deviceViewModel in una lista, e poi lancia un evento che viene catturato dalla managerView, la quale a sua volta crea una nuova deviceView, vi associa il deviceViewModel (il cui riferimento è stato passato nell'evento) come datacontext e poi la mostra a video.

Qui però le cose mi si complicano, perchè ogni deviceViewModel deve gestire parecchie Shell (deviceShell, serviceShell, utilityShell ecc...) ognuna delle quali deve essere creata passando il riferimento della connection e ogni Shell deve essere in grado di sapere se è attiva o meno in modo da stoppare o riavviare i threads di competenza. In più la serviceShell contiene altre shell (tipo hardwareShell, parametersShell, methodsShell ecc...) sempre con le stesse caratteristiche delle precedenti. In ultimo deve essere possibile passare dalla DeviceView alla ManagerView (o dai rispettivi viewModel) e viceversa (usando la lista di riferimenti del managerViewModel di cui ho parlato prima)

Non essendo particolarmente esperto in materia volevo chiedere un qualche consiglio pratico su come gestire la comunicazione tra le varie shell (eventi, mediator?)
Visto che la shell attiva deve avere una view che occupa l'intera finestra (quindi niente TabControls), pensavo ogni volta di creare / distruggere la shell e rispettiva view. E' corretto?

Grazie
Andrea
Modificato da andypat il 19 novembre 2009 10.04 -
Ciao,
in teoria passare un riferimento del DeviceViewModel alla ShellViewModel e poterne poi interrogarne le proprietà.
Se però i riferimenti si fanno troppo complessi, allora ti suggerisco di usare IoC come illustro qua http://www.winfxitalia.com/articoli/presentation-foundation/architettura-model-view-viewmodel-wpf-problemi-comuni-p-5.aspx#title_1 in modo che ogni shell possa ottenere le informazioni che vuole.
Ricreare ogni volta la View può andare bene, dato che è il ViewModel a mantenere lo stato finché lo mantieni in vita, perciò risparmiare sull'interfaccia può andare bene.

Ciao

Il mio blog
Homepage
20 messaggi dal 30 maggio 2007
Prima di tutto ti ringrazio per la risposta. Volevo evitare di affidarmi a toolkit o framework di terze parti e la possibilità di implementare io stesso un pattern complesso viene messa a dura prova dalla mia scarsa competenza sull'argomento. Per questo ho pensato di provare prima con una cosa semplice semplice tipo l'approccio usato nel globalized wizard http://www.codeproject.com/KB/WPF/InternationalizedWizard.aspx . Se ciò non dovesse essere sufficiente, mi rimboccherò le maniche e seguirò il tuo consiglio.

Ciao
Modificato da andypat il 20 novembre 2009 09.12 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.