Architettura Model-View-ViewModel in un'applicazione WPF

7 pagine in totale: <<Indietro 1 2 3 4 5 6 [7]

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.

7 pagine in totale: <<Indietro 1 2 3 4 5 6 [7]

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.



Segnala su: Facebook MSDN Social Twitter Segnalo Wikio Diggita Technorati Stumbleupon Google Yahoo FriendFeed Delicious Furl

IL CONTENUTO
TUTORIALS
TOP TEN ARTICOLI
ARTICOLI VIA E-EMAIL

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

MEDIA
IN EVIDENZA
MISC