5 pagine in totale: <<Indietro 1 2 3 4 [5]
Convertire i valori in Binding
Dal punto di vista puramente estetico visualizzare il valore enumerato sotto forma di stringa, non è certo il massimo e sicuramente un grafico pignolo obbietterà questa scelta. Per porre freno a qualsiasi velleità artistica del grafico di turno, decidiamo di visualizzare un'immagine, ma come convertire il valore enumerato in un percorso di un'immagine valido?
Il sistema di Binding di WPF, consente per tutti gli scenari, dove sorgente dati e destinazione non sono compatibili, di impostare un particolare oggetto che implementi IValueConverter con il compito di convertire i tipi incompatibili.
L'interfaccia dichiara due metodi Convert e ConvertBack, per convertire rispettivamente dal tipo della sorgente dati al tipo della proprietà destinazione e vice versa.
I due metodi presentano la medesima firma: il primo parametro rappresenta il valore proveniente dalla sorgente dati, il secondo è il tipo destinazione, il terzo e il quarto rispettivamente gli eventuali parametri passati al convertitore e la cultura da utilizzare.
Creiamo quindi una nuova classe, chiamata EditorPrizeValueConverter e implementiamo l'interfaccia IValueConverter che nel nostro caso ritorna il percorso di un'immagine in base al valore dell'enumeratore.
namespace MyGamePlace
{
[ValueConversion(typeof(EditorPrize), typeof(String))]
public class EditorPrizeValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is EditorPrize)
{
EditorPrize _prize = (EditorPrize)value;
switch (_prize)
{
case EditorPrize.BestSinglePlayer:
//un altra immagine quà
break;
case EditorPrize.BestGamePlay:
return @"Images\BestGamePlay.png";
case EditorPrize.BestMultyPlayer:
//un altra immagine quà
break;
default:
//un altra immagine quà
break;
}
}
return string.Empty;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
}
Non implementeremo il metodo ConvertBack perche non è prevista l'esecuzione del percorso inverso, cioè dal path dell'immagine recuperare il valore enumerato.
Inseriamo quindi il nostro converter tra la collezione delle risorse, sostituiamo con un Image il tipo TextBlock che visualizzava la proprietà EditorPrize, ma utilizziamo la medesima Maurkup Extension, con la sola differenza che stavolta imposteremo la proprietà Converter.
<Window.Resources>
...
<FairPlay:EditorPrizeValueConverter x:Key="EditorPrizeValueConverter"/>
...
</Window.Resources>
<Image Grid.Row="0" Grid.Column="3" Source="{Binding Path=EditorPrize, Converter={StaticResource EditorPrizeValueConverter}}" Height="80" />

Conclusione
Con questo articolo il viaggio alla scoperta del Binding di WPF è proseguito affrontando le basi sull'uso dei Template e dimostrando come sia semplice personalizzare l'aspetto delle liste. Nel prossimo articolo affronteremo particolari più avanzati sulle tecniche di Template e vedremo come personalizzare l'aspetto dei controlli.
5 pagine in totale: <<Indietro 1 2 3 4 [5]
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!
