Volendo presentare dei dati in formato tabellare con uno stile grafico maggiormente accattivante, ho voluto provare ad utilizzare l' hosting di un controllo WPF in una Windows Forms già esistente. Ora, già sapevo che in realtà la rappresentazione dei dati in formato griglia in WPF viene implementata tramite una personalizzazione della proprietà View del controllo ListView. Quello che invece non mi aspettavo era che nel layout "GridView mode" di un ListView mancasse di default una feature "scontata" come il sorting tramite click sull' header delle colonne (abituale sia in Windows Forms che in ASP.NET).
Ho trovato dunque questo articolo su MSDN, How to: Sort a GridView Column When a Header Is Clicked, dove si mostra come implementare a manina la concitata feature tramite la gestione dell'evento Click scatenabile sull'oggetto GridViewColumnHeader (nel nostro caso GridViewColumnHeaderClickedHandler), che deriva da ButtonBase:
<ListView x:Name="MyListView" ... GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Path=Property1}" Header="Property1" />
<GridViewColumn DisplayMemberBinding="{Binding Path=Property2}" Header="Property2" />
...
</GridView>
</ListView.View>
</ListView>
OK, funziona, ma sinceramente sono rimasto un po' stranito: non che il tutto sia stato complicato, ma mi sarei aspettato nell'oggetto GridView una proprietà tipo AllowSorting accompagnata magari da un evento OnSorting, una proprietà SortExpression ... insomma.... qualcosa built-in a supporto di questa funzionalità.
Andandomi a leggere GridView Overview su MSDN trovo l'esplicitazione di questa "omissione":
"Interact with columns by clicking the column header buttons.
When users click a column header button, they can sort the data that is displayed in the column if you have provided a sorting algorithm.
You can handle the Click event for column header buttons in order to provide functionality like a sorting algorithm."
Riflettendoci bene, possono esistere diversi modi per implementare il sorting di una rappresentazione tabellare, soprattutto se pensiamo alla possibilità di "templatizzare" gli header di colonna. Ad ogni modo ritengo che l'integrazione di un meccanismo di sorting di default non avrebbe fatto male ;).
Technorati tags: WPF , ListView