Per visualizzare la lista delle recensioni utilizzeremo il controllo ListBox. L'istinto indurrebbe a creare il Binding tra la proprietà GameReviews, che restituisce una collezione di recensioni, e la proprietà Items della ListBox, con lo scopo naturalmente di creare per ogni oggetto GameReview un elemento della lista. Purtroppo la proprietà Items non è una DependecyProperty, requisito fondamentale per la proprietà destinazione del Binding e perciò il controllo ListBox espone, come ogni controllo derivato dal tipo ItemsControl, la DependecyProperty ItemsSource. Utilizzando quindi la ormai consueta sintassi offerta dalle Markup Exstension impostiamo come sorgente dati la proprietà GameReviews esposta dalla classe Reviews, già aggiunta tra le risorse utilizzabili dall'applicazione.
<Window x:Class="MyGamePlace.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:FairPlay="clr-namespace:MyGamePlace"
Title="MyGamePlace" Height="300" Width="300"
>
<Window.Resources>
<FairPlay:Reviews x:Key="GameReviews"/>
</Window.Resources>
<StackPanel>
<ListBox ItemsSource="{Binding Source={StaticResource GameReviews}, Path=GameReviews }"></ListBox>
</StackPanel>
</Window>
Senza esitazione compiliamo ed eseguiamo la nostra applicazione.

Il primo impatto non è certo incoraggiante: per ogni elemento è mostrato il tipo della classe, sicuramente non un'informazione utile per l'utente della nostra applicazione.
Per risolvere questo inconveniente il tipo ListBox espone la proprietà DisplayMemberPath così da specificare il percorso della proprietà da visualizzare per ogni item. Nel nostro caso la sorgente dati è una lista di oggetti GameReview che a sua volta espone una proprietà Game. Al fine di mostrare per ogni item il nome del gioco recensito, è necessario assegnare quindi alla proprietà DisplayMemberPath il valore Game.Name.
<ListBox DisplayMemberPath="Game.Name" ItemsSource="{Binding Source={StaticResource GameReviews}, Path=GameReviews }"></ListBox>
Sicuramente un risultato migliore rispetto al primo tentativo, ma come visualizzare magari accanto al nome il voto assegnato al gioco?
Purtroppo con DisplayMemberPath è possibile associare un unico percorso e quindi visualizzare un'unica proprietà. Una possibilità non certo allettante, visto tutti i problemi che potrebbe comportare, è eseguire l'override del metodo ToString del tipo GameReview in modo da restituire tutte le informazioni che riteniamo necessarie.
Infatti, in mancanza di altre istruzioni per ogni oggetto della collezione, il motore richiama per la visualizzazione il metodo ToString.
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
- Pagina 1
- Pagina 3
- Pagina 4
- Pagina 5
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Difficoltà
Stampa
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
