WPF e Silverlight
Corso formativo su WPF e Silverlight
Quando si apre una nuova childwindow si può scegliere di aprirla a dimensione fissa, oppure di dimensionarla in base alla dimensione attuale del browser. Questo il codice : childWindow.Width = ((AppTest.MainPage)(((Activity)App.Current.RootVisual).Content)).ContentFrame.ActualWidth;
childWindow.Height = ((AppTest.MainPage)(((Activity)App.Current.RootVisual).Content)).ContentFrame.ActualHeight;
Per chi non lo sapesse SharpDevelop è un IDE Free per c#.
Pochi giorni fa è stata rilasciata la nuova beta della versione 4.0
Oltre ad essere un buon ide, interessante sono i codici sorgenti, da cui prendere spunto.
http://www.icsharpcode.net/
Volevo mettervi in guardia… <ComboBox HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" ItemsSource="{Binding Lista, Mode=OneWay}" SelectedItem="{Binding ElementoSelezionato, Mode=TwoWay}"/> è differente da questo: <ComboBox HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" SelectedItem="{Binding ElementoSelezionato, Mode=TwoWay}" ItemsSource="{Binding Lista, Mode=OneWay}"/> Il primo va decisamente meglio rispetto al secondo!
Non so se avete mai provato, ma creando una listbox e successivamente avete provato a customizzare l’item template, avrete certamente notato che l’item non effettua lo stretch a riempimento rispetto alla listbox.
Il trucco? Customizzare anche lo style:
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
</Style>
</ListBox.ItemContainerStyle>
Innanzitutto cos’è silverlight?
Silverlight è una tecnologia creata per gli sviluppatori web e che permette di creare e pubblicare online contenuti interattivi e applicazioni di grafica 2D, audio, video, animazioni vettoriali e giochi.
Rispetto a Flash, Microsoft Silverlight crea contenuti facilmente indicizzabili dai motori di ricerca e supporta nativamente lo standard HD (video in alta definizione) e il DRM.
Ultima cosa, importantissima: per scrivere un applicativo silverlight si deve conoscere XAML!!!!!!
Per scrivere un’applicazione silverlight occorre:
• Windows &...
Come abbiamo visto WCF è disponibile dal Framework 3.0 di .Net
Espone servizi con 4 diversi tipi di protocollo:
http
TCP
MSMQ
Named Pipe
Si basa su 3 semplici concetti:
1. Cosa voglio...
Normal
0
14
false
false
false
IT
X-NONE
X-NONE
MicrosoftInternetExplorer4
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tabella normale";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;}
Oggi parliamo di WCF.
Innanzitutto cosa sono:
http://www.winfxitalia.com/articoli/communication_foundation/introduzione.aspx
Per poi seguire un tutorial completo:
http://visualcsharp.it/news/2009/11/20/wcf-i-parte/
http://visualcsharp.it/news/2009/11/21/wcf-ii-parte/
http://visualcsharp.it/news/2009/11/22/wcf-iii-parte/
http://visualcsharp.it/news/2009/11/24/wcf-iv-parte/
http://visualcsharp.it/news/2009/11/27/wcf-v-parte/
http://visualcsharp.it/news/2009/11/30/wcf-vi-parte/
http://visualcsharp.it/news/2009/12/07/wcf-vii-parte/
http://visualcsharp.it/news/2009/12/11/wcf-viii-parte/
Interessante inoltre questo web cast di Alessandro Del Sole sugli ADO.NET Data Services, un Framework basato su WCF per l’esposizione dei dati in rete.
http://www.microsoft.com/italy/beit/Generic.aspx?video=dcd4d0d0-9cd7-49ad-9981-232a0eb1b57d
Come approfondimento:
http://www.winfxitalia.com/articoli/winfx/windows_communication_foundation_sicurezza.aspx
http://www.winfxitalia.com/articoli/communication-foundation/costruire-chat-wcf.aspx
http://www.winfxitalia.com/articoli/communication-foundation/Tracing-Windows-Communication-Foundation.aspx
Ovviamente non dobbiamo reinventare tutto ogni qualvolta creiamo un’applicazione nuova e vogliamo utilizzare l’M-V-VM, ma esistono dei framework già belli e pronti:
PRISM http://compositewpf.codeplex.com/
MVVM light toolkit http://www.galasoft.ch/mvvm/getstarted/
WPF Onyx http://wpfonyx.codeplex.com/
Caliburn http://caliburn.codeplex.com/
Ocean http://karlshifflett.wordpress.com/2009/01/26/ocean-framework-released-mvvm-for-wpf-line-of-business-update/
Abbiamo visto fin qui come creare una UI gradevole all’utente e come fare il binding dei dati corretto.
Ma come si può programmare correttamente e creare un’applicazione testabile? Qual è il modo più corretto per sviluppare un’applicazione WPF?
Ci vengono in aiuto gli stessi sviluppatori di Blend dandoci in mano un pattern, il Model-View-ViewModel.
Questo pattern consente una separazione tra la UI e i dati stessi, permettendo una testabilità del codice completa.
E’ derivato da MVC – Presentation Model.
Vi consiglio questo video di Corrado Cavalli.
http://www.microsoft.com/italy/beit/Msdn.aspx?video=24878a7f-235d-43ae-8aec-f09c2224fe49
http://www.winfxitalia.com/articoli/presentation-foundation/architettura-model-view-viewmodel-wpf-p-1.aspx
In inglese :
http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
Da analizzare anche il command binding:
http://blog.raffaeu.com/archive/2009/06/15/wpf-and-mvvm-tutorial-04-the-commands.aspx
http://dotnetcenter.it/articles/10/MVVM-per-la-realizzazione-di-client-WPF.html
Vi consiglio inoltre i seguenti video che, oltre a riprendere il MVVM riprendono...
Tempo fa su un forum è apparsa la seguente domanda:
“Ciao a tutti.
Ho sempre sviluppato in Windows Forms e non ho mai avuto problemi, ma
mi sto affezionando sempre di più alla nuova tecnologia WPF.
Sto per iniziare a scrivere un nuovo gestionale e mi chiedevo se fosse
meglio continuare con Windows Forms o passare a WPF.
Per un gestionale, WPF è realmente utile?...
Ma in WPF abbiamo solo vantaggi? Si e no, anche se i primi superano notevolmente i secondi.
Se diamo uno sguardo ai componenti resi disponibili da WPF si nota subito la mancanza della datagrid…
Ma la datagrid è realmente necessaria? Ne siamo proprio sicuri?
http://blogs.ugidotnet.org/BlogEma/archive/2009/11/13/avoid-datagrid-ot-del-venerdi.aspx
http://blogs.ugidotnet.org/BlogEma/archive/2009/11/27/avoid-datagrid-seconda-puntata.aspx
Comunque, se abbiamo proprio bisogno di visualizzare i nostri dati in una datagrid possiamo utilizzare il WPF toolkit:
...
Abbiamo visto come creare la UI di una applicazione WPF, abbiamo visto il BIND, ora vediamo gli stili.
STILI
Gli stili definiscono un gruppo di proprietà che è possibile assegnare a un determinato tipo di controlli per influenzarne l'aspetto estetico
Gli stili risiedono all'interno delle risorse di un contenitore di controlli (es. Window.Resources, StackPanel.Resources e così via).
Vi consiglio questi link:
http://www.winfxitalia.com/articoli/presentation-foundation/gestire-risorse-stili-wpf-1.aspx
http://www.winfxitalia.com/articoli/presentation-foundation/gestire-risorse-stili-wpf-2.aspx
http://community.visual-basic.it/greg/archive/2009/10/26/26796.aspx
http://msdn.microsoft.com/it-it/library/cc294894%28Expression.30%29.aspx
I Trigger invece vengono utilizzati per applicare i valori delle proprietà stabilite negli elementi Setter solo al verificarsi di una determinata condizione.
I Trigger sono molto potenti ed è possibile, ad esempio, valutare...
Abbiamo quindi diversi Binding:
· Simple bind, è la semplice associazione tra oggetto e percorso
· Element Bind è il bind tra un elemento e l’altro , ad esempio tra uno slider e una label che visualizzerà il valore dello slider
Abbiamo poi diverse modalità di binding che determinano il comportamento:
OneWay
TwoWay
OneTime OneWayToSource
Un’altra componente molto importante sui binding sono i converter:
http://www.winfxitalia.com/script/29/StringFormatConverter-Binding-WPF.aspx
http://blogs.msdn.com/bencon/archive/2006/05/10/594886.aspx
http://dotnetside.org/blogs/vito/archive/2007/07/03/ValueConverter-per-la-formattazione-in-WPF.aspx
Altri elementi molto importanti è l’implementazione e l’utilizzo dell’INotifyPropertyChanged che consente di notificare alla UI il cambio di valore delle property dell’oggetto in datacontext, e ObservableCollection.
http://www.visual-basic.it/articoli/adsWPF_DataBinding.htm
http://www.winfxitalia.com/script/25/Creare-Collezioni-Utilizzabili-Binding-WPF.aspx
Il Binding è possibile definirlo non sono utilizzando XAML ma anche via codice:
TextBox nameTextBox = new TextBox();
Binding nameTextBinding = new Binding("Name");
nameTextBinding.Source = person;
nameTextBox.SetBinding(TextBox.TextProperty, nameTextBinding);
// set style on text box, add text box to container etc
TextBox positionedTextBox = new TextBox();
Binding positionBinding = new Binding("Minute");
positionBinding.Source = System.DateTime.Now;
positionedTextBox.SetBinding(Canvas.TopProperty, positionBinding);
mainCanvas.Children.Add(positionedTextBox);
Anche...
Abbiamo visto come costruire interfacce WPF, e abbiamo visto come si utilizza XAML. Se avete notato ai controlli spesso non mettiamo i nomi in quanto … non necessari! Per un programmatore Windows Forms questo è forse lo scoglio più grande! Abituati da anni a nominare qualunque controllo, quello di non utilizzare più i nomi in quanto non più strettamente necessario al corretto funzionamento dell’applicazione è, a mio avviso, il problema più grosso. La domanda sorge spontanea: e come si fa a visualizzare i dati? E qui entra in gioco il DataBinding.
http://g.www.ms.akadns.net/italy/beit/Generic.aspx?video=004458eb-a56c-43ca-9644-b7e5a9d5169a
Assieme al DataBinding entrano in...
Dovreste aver capito quindi che per costruire una buona applicazione WPF oltre a Visual Studio è necessario l’adozione di uno strumento di Design quale Expression Blend. In pratica con Visual Studio si imposta quello che sarà il codice, e una bozza della UI. Poi in Expression Blend il designer potrà creare un’interfaccia utile gradevole ed essenziale per l’utente. In entrambi i casi è necessario conoscere l’XML e più precisamente il linguaggio XAML. Segnalo questi due tutorial molto interessanti per chi arriva dalla normale programmazione Windows Forms: http://www.microsoft.com/italy/beit/Msdn.aspx?video=9d2bb405-ac2a-47c4-b797-fd84852d7c3b http://www.microsoft.com/italy/beit/Msdn.aspx?video=2372e8e7-939e-429c-beea-6465651cf734 Per approfondire XAML : http://msdn.microsoft.com/en-us/library/ms752059.aspx ...
Vi giro il link di un bellissimo PDF sul come costruire una UI in stile OUTLOOK usando Blend.
Vi guiderà passo passo, partendo da un progetto base, nella costruzione della UI.
http://www.microsoft.com/switzerland/msdn/de/presentationfinder/detail.mspx?id=104056
Abbiamo visto cos’è XAML e l’abbiamo definito come un nuovo linguaggio basato su XML.
Introduciamo quindi WPF, vediamo il seguente post di Corrado Cavalli
http://www.microsoft.com/italy/beit/Msdn.aspx?video=72c25485-edb8-4196-9300-5b17f11d0fb3#1
Come vedrete dal video (che potete pure scaricare) l’approccio in disegno della UI cambia radicalmente rispetto a Windows Forms.
Buona visione
Prima di fiondarci completamente su WPF e sui suoi modelli vorrei fare assieme a voi un ripassino veloce su Entity Framework.
L’Entity Framework è un ORM ed è specificatamente sviluppato per le operazioni CRUD.
Una volta che create il modello EF da un DB esistente, dovrete organizzare le classi in modo tale da ottimizzare e migliorare la successiva scrittura del codice.
Ad esempio se abbiamo una tabella Soggetti, dove la colonna TipoSoggetto identifica un determinato tipologia di soggetto, possiamo utilizzare la colonna stessa come identificativo di oggetti differenti (Table Per Hierarchy Inheritance)
Se la stessa tabella soggetti ha collegato differenti tabelle (persone, enti,...
Abbiamo visto quindi LINQ, LINQ2SQL e l’Entity Framework.
A questo punto abbiamo un buon metodo per collegarci a qualunque fonte dati.
Iniziamo dunque a parlare di XAML.
XAML, acronimo di Extensible Application Markup Language, è un linguaggio di markup basato su XML ed è sviluppato da Microsoft.
XAML è il linguaggio alla base della presentazione visiva di un'applicazione sviluppata in Microsoft Expression Blend, così come HTML è il linguaggio alla base della presentazione visiva di una pagina Web.
Il linguaggio XAML fa parte di Microsoft Windows Presentation Foundation (WPF).
WPF è la categoria di funzionalità di Microsoft .NET Framework 3.5 relativa alla presentazione visiva di...
Ieri avete visto LInq2SQL, ovvero una delle implementazioni di LINQ che, ricordiamo, è la parte .NET per effettuare delle query su oggetti.
Tra le varie implementazioni di LINQ ricordiamo :
Linq to XML
Linq to Dataset
Linq to SQL
Purtroppo, come indicato in questo post
http://blogs.ugidotnet.org/luKa/archive/2009/04/28/linq2sql.aspx
Linq to sql è un progetto che non viene più portato avanti da Microsoft e, è bene ribadirlo, LINQ to SQL non è un ORM!
ORM : http://it.wikipedia.org/wiki/Object-relational_mapping
Microsoft comunque ha abbandonato Linq to SQL in favore di Entity Framework e ha creato la relativa implementazione in LINQ chiamata, ovviamente, LINQ to Entity Framework.
Per capire cos’è Entity Framework :
http://www.linqitalia.com/articoli/entity-framework/introduzione-entity-framework.aspx
Per approfondire l’argomento,...
Con LINQ abbiamo quindi introdotto gli anonymous type (http://www.linqitalia.com/script/16/Anonymous-Type-LINQ.aspx)
Dim names = From cust In Customers
Da notare che gli anonymous type sono visibili solo all’interno dello stack in cui l’abbiamo dichiarato, quindi all’interno o di una funzione o di un metodo, mai di una classe.
Quindi dopo aver visto LINQ e quindi aver capito che tanti cicli for possiamo eliminarli, vediamo cos’è LINQ2SQL.
Utilizzando LINQ to SQL è possibile avvalersi della tecnologia LINQ per accedere ai database SQL come se si trattasse di un insieme in memoria
Utilizzando Linq to SQL è possibile fare operazioni di ricerca/inserimento/modifica su un db SQL Server.
Vi consiglio questo...
Una query linq più complessa :
Dim categories = From prod In products _
Group prod By prod.Category _
Into PrezzoPiuEconomico = Min(prod.UnitPrice) _
Select Category, PrezzoPiuEconomico
O
Dim categories = From prod In products _
Group prod By prod.Category _
Into Prods = Group, minPrice = Min(prod.UnitPrice) _
Let CheapestProducts = (From p In Prods _
Where p.UnitPrice = minPrice) _
Select Category, CheapestProducts
Se ieri avete visto i web cast e i siti web che vi ho elencato il seguente codice dovrebbe risultarvi semplice da interpretare:
Dim numeri As Integer() = New Integer() {1, 2, 3, 4, 5}
Dim numeriPari = From n In numeri Where (n Mod 2 = 0) Select n
For Each item In numeriPari
Console.WriteLine("{0}", item)
Next
Sperando di fare una cosa gradita, inizio una serie di post che, nelle mie intenzioni, dovrebbe portarvi dall’inizio fino alla fine, nella conoscenza di WPF e Silverlight.
Iniziamo quindi da LINQ, la vera novità introdotta dal Framework 3.5
LINQ è l’acronimo di Language INtegrated Query ed è fondamentalmente una serie di estensioni sitattiche.
Con LINQ di possono eseguire diverse interrogazioni su molteplici tipologie di dati :
Linq To Object (query su oggetti)
Linq to XML (query su XML)
Linq to SQL (query su DB)
Linq to Dataset (query su dataset)
Di queste tecnologie iniziamo quindi dalla base per apprendere cos’è e cosa fa LINQ ovvero LINQ to Object.
Vi...