Architettura Model-View-ViewModel in un'applicazione WPF
di Cristian Civera, in Windows Presentation Foundatio, 24 febbraio 2009
Binding e Template del ViewModel
A questo punto è giunta l'ora di vedere come sfruttare le proprietà, i ViewModel e le collezioni messe a disposizione. Il punto di partenza è il MainWindowViewModel che come si è già visto contiene la lista dei thread. Si ipotizzi quindi di caricarli in una ListBox della View principale:
<ListBox ItemTemplate="{StaticResource ThreadItemTemplate}" IsSynchronizedWithCurrentItem="True"> </ListBox>
L'attributo IsSynchronizedWithCurrentItem è fondamentale e istruisce il controllo a sincronizzare ogni selezione con la ICollectionView associata. Con ItemTemplate si associa invece un template per il redering minimo di ogni thread. Se si volesse vedere nel dettaglio il thread associato si possono scegliere diverse strade, ma tutte dovrebbero preferibilmente sfruttare il fatto che ogni thread ha un ViewModel associata e quindi uno UserControl può rappresentare la sua View.
<v:ThreadPostView DataContext="{Binding Threads/}" />
Oppure si può sfruttare il sistema di associazione automatica dei template in base al DataType e definire un DataTemplate in questo modo:
<DataTemplate DataType="{x:Type vm:ThreadPostViewModel}"> <v:ThreadPostView /> </DataTemplate>
Per poi ottenerne l'applicazione automatica sfruttando un ContentControl:
<ContentControl Content="{Binding Threads/}" />
Questa tecnica può essere sfruttata anche in alternativa all'uso di ItemTemplate specifici, lasciando che il motore scelga il DataTemplate in automatico. Viene inoltre ancora più utile quando si hanno classi derivate da uno specifico ViewModel e non si può specificare a priori un ItemTemplate per tutti gli elementi.
Conclusioni
In questo articolo è stato illustrato in modo generico l'idea del pattern MVVM e come questo sfrutti appieno tutte le capacità di WPF senza buttare vie niente del know-how che si può avere già acquisito usando questa tecnologia. Vi sono alcuni aspetti più di nicchia che non sono stati discussi, ma della quale si può trovare un esempio nell'allegato dell'articolo. I margini di manovra sono ampi; per esempio vi sono i controlli che in alcuni casi non bastano nelle loro funzionalità, perciò vengono in aiuto gli attached behavior, visti in questo script, o in casi estremi il subclassing per personalizzare al massimo un controllo.
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
- Pagina 1
- Pagina 2
- Pagina 3
- Pagina 4
- Pagina 5
- Pagina 6
- Pagina 7
Sullo stesso argomento
-
#121 - Utilizzare il KeyBinding di WPF con il pattern M-V-VM
-
#151 - Disabilitare Aero programmaticamente per incrementare le performance di WPF
-
#159 - Gestire code di operazioni con un Dispatcher personalizzato
-
#155 - Gestire e ottimizzare messaggi di grandi dimensioni in WCF
-
#143 - Forzare la modalità di rendering software nelle applicazioni WPF
-
#115 - Creare file ZIP con System.IO.Packaging
-
#119 - Creare servizi WCF per applicazioni Silverlight
-
MetadataDiffViewer: differenze tra i framework
-
Disponibile la beta 1 del .NET Framework 4.0 e di Visual Studio 2010
-
Rilasciato ASP.NET MVC 2 Release Candidate
-
L'accesso ai dati nell'era del cloud computing con Windows Azure
-
#133 - Una collezione avanzata per il data binding di WPF

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.