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}">
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Abilitare l'uso di C# 9 nelle applicazioni Xamarin.Forms
Sviluppare applicazioni con supporto al doppio schermo con Xamarin
Chiamare API WinRT da applicazioni .NET 5
Creare un controllo Expander in un'app Xamarin Forms
Il futuro delle applicazioni Windows con .NET 5
Gestione dei token negli input di testo con la Universal Windows Platform
Winget: un nuovo package manager per Windows
Avviare una registrazione audio e video in una applicazione della Universal Windows Platform
Eseguire del codice personalizzato al click di una checkbox in Blazor
Eseguire lo shutdown pulito di un'applicazione ASP.NET Core
Personalizzare gli elementi del controllo SwipeView in Xamarin Forms
Realizzare un effetto gradiente tramite composition API nella Universal Windows Platform