L'articolo è la continuazione della seconda parte pubblicata il 6 novembre 2007.
Selezionare i Template con DataTemplateSelector
Abbiamo visto come sia possibile eseguire un'associazione implicita tra l'oggetto e il template per visualizzarlo. In altri scenari questa logica implicita non sempre è adeguata e i parametri per decidere il templare da utilizzare possono essere diversi. A questo scopo WPF mette a disposizione la classe DataTemplateSelector che assegnandola alla proprietà ItemTemplateSelector, esposta dalla classe LisBox e da tutti i tipi derivati da ItemsControl, ci permette di scegliere il template da utilizzare al momento secondo logiche personalizzate.
Creiamo quindi una nuova classe derivata da DataTemplateSelector ed eseguiamo l'override del metodo SelectTemplate.
namespace MyGamePlace
{
public class ByGameGenreDataTemplateSelector : DataTemplateSelector
{
public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container)
{
GameReview _gameReview = item as GameReview;
if (_gameReview != null)
{
//recupero la finestra corretente che contiene tra le sue risorse il DataTemplate da utilizzare
Window _window = Application.Current.MainWindow;
//applico la mia logica di selezione
if (_gameReview.Game.Genre == GameGenre.Rpg)
{
//recupero la risorsa
return _window.FindResource("RpjGameReview") as DataTemplate;
}
return null;
}
return null;
}
}
}
La firma del metodo dichiara due parametri: il primo di tipo object riceve l'oggetto da valutare per selezionare il template, nel nostro caso il tipo GameReview o EditorChoice , mentre il secondo e ultimo parametro del tipo DependencyObject riceve l'elemento di destinazione del template.
Aggiungiamo, come già abbiamo fatto in precedenza, ByGameGenreDataTemplateSelector tra le risorse dell'oggetto Window e impostiamo la proprietà ItemTemplateSelector.
<ListBox
ItemsSource="{Binding Source={StaticResource GameReviews}, Path=GameReviews}"
HorizontalContentAlignment="Stretch"
ItemTemplateSelector="{StaticResource ByGenreDataTemplateSelector}">
Contenuti dell'articolo
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!
