Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

WPF: formattare dati a livello di XAML e data-binding

.NET Framework 3.5 Service Pack 1 ha introdotto una interessante novità nel data-binding in Windows Presentation Foundation, ossia la possibilità di specificare la modalità di formattazione delle stringhe/valori direttamente nello XAML. È infatti possibile utilizzare una proprietà chiamata StringFormat all’interno delle XAML markup extension che pongono in essere il data-binding.

 

Prima di proseguire nella lettura del presente post, dovete avere un’infarinatura del data-binding in WPF e dei DataTemplate. Magari può esservi utile allo scopo questo mio articolo su Visual Basic Tips & Tricks.

 

Consideriamo il seguente semplice esempio, che visualizza l’identificativo e la data di ciascun ordine recuperato dalla tabella Orders (mappata, nel mio caso, in un Entity Data Model in ADO.NET Entity Framework), in cui dovete fare attenzione al DataTemplate della colonna Order Date:

 

    <Grid>

        <ListView Name="OrdersListView">

            <ListView.View>

                <GridView>

                    <GridViewColumn Header="Order ID">

                        <GridViewColumn.CellTemplate>

                            <DataTemplate>

                                <TextBlock Text="{Binding Path=OrderID}"/>

                            </DataTemplate>

                        </GridViewColumn.CellTemplate>

                    </GridViewColumn>

 

                    <GridViewColumn Header="Order Date">

                        <GridViewColumn.CellTemplate>

                            <DataTemplate>

                                <!-- "D" è la forma estesa, "d" quella contratta-->

                                <TextBlock Text="{Binding Path=OrderDate, StringFormat=D}"/>

                            </DataTemplate>

                        </GridViewColumn.CellTemplate>

                    </GridViewColumn>

                </GridView>

            </ListView.View>

        </ListView>

    </Grid>

 

Da codice assegnamo semplicemente la proprietà ItemsSource della ListView:

 

    Public Sub New()

 

        ' This call is required by the Windows Form Designer.

        InitializeComponent()

 

        ' Add any initialization after the InitializeComponent() call.

 

        Dim NorthwindContext As New NORTHWNDEntities

 

        Me.OrdersListView.ItemsSource = NorthwindContext.Orders

 

    End Sub

 

ed otteniamo il seguente risultato:

 

 

 

In sostanza possiamo utilizzare la proprietà StringFormat per poter formattare la data. La D maiuscola indica la data in formato esteso. Consideriamo ora il seguente XAML, che formatta un valore decimale col simbolo della valuta locale e un altro valore decimale sotto forma di percentuale (nel mio caso i dati sono estratti dall’entità Order_Details):

 

        <ListView Name="OrdersListView">

            <ListView.View>

                <GridView>

                    <GridViewColumn Header="Order ID">

                        <GridViewColumn.CellTemplate>

                            <DataTemplate>

                                <TextBlock Text="{Binding Path=OrderID}"/>

                            </DataTemplate>

                        </GridViewColumn.CellTemplate>

                    </GridViewColumn>

 

                    <GridViewColumn Header="Discount">

                        <GridViewColumn.CellTemplate>

                            <DataTemplate>

                                <!-- formatta come percentuale-->

                                <TextBlock Text="{Binding Path=Discount, StringFormat=p}"/>

                            </DataTemplate>

                        </GridViewColumn.CellTemplate>

                    </GridViewColumn>

 

                    <GridViewColumn Header="Unit price">

                        <GridViewColumn.CellTemplate>

                            <DataTemplate>

                                <!-- formatta come percentuale-->

                                <TextBlock Text="{Binding Path=Discount, StringFormat=c}"/>

                            </DataTemplate>

                        </GridViewColumn.CellTemplate>

                    </GridViewColumn>

                </GridView>

            </ListView.View>

        </ListView>

 

Il cui risultato, sempre dopo aver assegnato la sorgente dati, è il seguente:

 

 

Osservate come l'utilizzo della StringFormat abbia permesso di visualizzare valori percentuali e valuta di sistema. Per esempio, si potrebbe utilizzare la lettera F per rappresentare un numero decimale, seguito da un numero che indica quante cifre devono seguire la virgola (es. F2 può rappresentare 3,14).

Abbiamo quindi visto come formattare dei valori nello XAML, direttamente in fase di binding, sia davvero molto semplice con WPF 3.5 SP 1 e come questa tecnica permetta di ottenere un risultato decisamente più apprezzabile a livello di presentazione dei dati senza scrivere codice dedicato.

 

Alessandro

Print | posted on venerdì 20 febbraio 2009 01:19 | Filed Under [ Windows Presentation Foundation ]

Powered by:
Powered By Subtext Powered By ASP.NET