Usare la ListView
Partiamo da questo screenshot:
L’altra volta avevamo visto come gestire da codice l’orribile TextBox inserita nel menù, con il relativo Button per poter salvare l’immagine sul proprio disco fisso locale. Per maggiori informazioni leggete questo post.
Questo ContextMenu dà accesso ad alcune altre funzionalità piuttosto divertenti, come quella per richiedere l’elenco dei tag associati ad una particolare fotografia. Il codice è molto semplice e compatto:
private void TagsMenuClick(object sender, RoutedEventArgs args) { FlickrBrowserPhoto photo = lstPhotos.SelectedItem as FlickrBrowserPhoto; string id = photo.PhotoId; PhotoInfoTag[] tags = flickrConn.PhotosGetInfo(id).Tags.TagCollection; StringBuilder bld = new StringBuilder(); foreach (PhotoInfoTag t in tags) bld.AppendLine(t.TagText); MessageBox.Show(bld.ToString()); }
Per semplicità, i tag vengono visualizzati con una rozza MessageBox.Show.
Quello di cui voglio brevemente parlare adesso è la visualizzazione delle informazioni EXIF associate ad una fotografia. Per farlo, ho creato una nuova Window, ExifWindow, il cui XAML è questo:
<Window x:Class="FlickrBrowser.ExifWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="FlickrBrowser" Height="300" Width="300" WindowStartupLocation="CenterScreen" > <ListView ItemsSource="{Binding Path=ExifTag}" HorizontalAlignment="Stretch" Margin="4" Name="lstExifInfo"> <ListView.View> <GridView> <GridViewColumn Width="100" Header="Label" DisplayMemberBinding = "{Binding Path=Label}" /> <GridViewColumn Width="100" Header="Value" DisplayMemberBinding = "{Binding Path=Raw}" /> </GridView> </ListView.View> </ListView> </Window>
Una Window, di dimensioni 300×300, che appare al centro dello schermo. Tale Window contiene un solo oggetto ListView, al quale diciamo che ogni item sarà di tipo ExifTag. La ListView comprende due colonne: la prima viene bindata alla proprietà Label della classe ExifTag, mentre la seconda alla proprietà Raw. Ho dato una larghezza alle colonne ed un header. Nulla di particolarmente complicato, insomma.
Quando l’utente vuole vedere le informazioni EXIF di una foto, utilizzo la libreria di Flickr per poter ottenere una struttura ExifTag[] da poter bindare.
private void ExifMenuClick(object sender, RoutedEventArgs args) { FlickrBrowserPhoto photo = lstPhotos.SelectedItem as FlickrBrowserPhoto; string id = photo.PhotoId; ExifTag[] exif = flickrConn.PhotosGetExif(id).ExifTagCollection; ExifWindow wnd = new ExifWindow(); wnd.SetExifInfo(exif); wnd.ShowDialog(); }
Ottengo il PhotoId della foto selezionata, ottengo l’elenco ExifTag[], creo un’istanza della Window ExifWindow, chiamo il suo metodo SetExifInfo e poi la visualizzo come modale. Quest’ultimo metodo pubblico è molto semplice:
public void SetExifInfo(ExifTag[] exif) { lstExifInfo.ItemsSource = exif; }
Non faccio altro che impostare il data-binding sulla ListView, dicendo di prendere l’elenco delle informazioni EXIF prelevate dalla foto. Il risultato è il seguente:
Ed il gioco è fatto!
Technorati Tags: wpf programming flickr .NET