Questo è il primo di alcuni articoli che tratteranno l’utilizzo del framework Radical, sviluppato da Mauro Servienti.
Qualche premessa:
- molto di quello che trovate qui lo potete trovare anche sulla documentazione di Radical che Mauro sta scrivendo, in inglese, impegni lavorativi permettendo;
- lo scopo di questi post è presentarvi alcune facilities che questo framework mette a disposizione, in italiano!
; - io ho sempre trovato poco intuitivo l’utilizzo del toolkit MVVM Light Toolkit;
- non mi piace molto l’utilizzo che fa Caliburn.Micro della proprietà Name dei controlli per il binding (mi hanno sempre detto: “in MVVM usare Name è MALE!”
), ma ammetto che è questione di gusti; - trovavo noioso e “error-prone” dover scrivere centinaia di righe di codice solo per gestire in maniera “decente” l’iterazione con l’utente.
Da queste poche righe, capite che fino a poco tempo fa il mio rapporto con MVVM e il databinding era molto problematico e alla fine ricadevo sempre sulle care e vecchie Windows Forms che almeno mi consentivano un miglior controllo sull’iterazione con la UI.
In tutti i progetti di esempio, infatti, vengono dimostrati i vantaggi del data binding facendo vedere come, con due righe di codice, puoi recuperare i dati e visualizzarli, ma non fanno vedere che, una volta applicato il pattern MVVM, ci si scontra con molti altri problemi che non avevamo con le vecchie WinForms, ad esempio: la gestione delle finestre di dialogo dal ViewModel, il passaggio di parametri tra View (o ViewModel), fino ad arrivare al problema di dover gestire il data binding con controlli che non lo prevedono (PasswordBox) ![Perplesso](http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/ddl/Windows-Live-Writer/Radical--Un_E46A/wlEmoticon-confusedsmile_2.png)
Radical ha una risposta a tutti questi problemi ed a molti altri e vi semplificherà la vita e diminuendo del 50% il codice che state scrivendo se usate MVVM Light Toolkit (esperienza diretta su un mio progetto).
Partiamo da una guida in 8 passi per creare un progetto funzionate (in C#):
- Create una nuova applicazione WPF;
- Aggiungete, attraverso Nuget, un riferimento a Radical.Windows.Presentation.CastleWindsor (ma se preferite o il vostro progetto usa già un altro IoC container sono supportati anche Unity2, Unity3, Autofac e Puzzle per le app RT). Nota: se non trovate il riferimento giusto dovete solo selezionare “Include Prelerase” nella ricerca dei pacchetti Nuget;
- Cancellate la Window creata di default da Visual Studio (MainWindow.xaml);
- Modificate il file "app.xaml" rimuovendo l'attributo "StartupUri"
- Aggiungete un folder “Presentation” al progetto (è il folder dove Radical cerca di default le View e i ViewModel);
- Create una nuova window chiamandola “MainView.xaml” (di default Radical considera Views le windows il cui nome finisce per “View”);
- Create una nuova classe chiamandola “MainViewModel.cs” (di default Radical considera ViewModels le classi il cui nome finisce per “ViewModel” e le lega alla View che ha la stessa radice);
Andate nel file “app.xaml.cs” e aggiungete una singola riga di codice (ovviamente cambiando la dichiarazione del bootstrapper a seconda dell’IoC container scelto):
public partial class App : Application
{
public App()
{
var bootstrapper = new WindsorApplicationBootstrapper<MainView>();
}
}
Premete F5 e tutto funzionerà, ossia si apre una Window vuota! ![A bocca aperta](http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/ddl/Windows-Live-Writer/Radical--Un_E46A/wlEmoticon-openmouthedsmile_2.png)
Come avrete capito anche Radical si basa sul paradigma Convention Over Configuration e dietro le quinte ha:
- Legato la View e il ViewModel senza dover aggiungere alcunché;
- Fatto partire la View da noi scelta (in questo caso la “MainView”);
- Reso la MainView singleton (per convenzione se la View inizia per “Main” o “Shell” allora è singleton);
- Abilitato molte altre cose che in progetto vuoto come questo non è possibile farvi vedere
-
Ovviamente tutte queste convenzioni possono essere “overridate” all’occorrenza
![Caldo](http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/ddl/Windows-Live-Writer/Radical--Un_E46A/wlEmoticon-hotsmile_2.png)
Ora abbiamo una Window vuota che dalla prossima volta vedremo di riempire con qualche controllo e un po’ di logica in modo da esplorare le altre potenzialità di questo framework.
Tag di Technorati:
Radical,
MVVM