WPF: dal DataBinding ai Template - Terza parte

5 pagine in totale: <<Indietro 1 [2] 3 4 5 Avanti >>

DataTemplateSelector WPF

Nel nostro semplice esempio la logica per la selezione del template magari non è sufficientemente complessa da giustificare la creazione di una nuova classe, ma anche in questo caso WPF mostra la sua enorme superiorità a qualsiasi altro sistema di Binding e presentazione mettendo a disposizione una collezione di trigger che l'oggetto DataTemplate e tutti i derivati da FrameworkTemplate espongono.

Mediante l'uso dei trigger è possibile valutare il valore di una determinata proprietà dell'oggetto da visualizzare e di conseguenza modificare il layout del template. Riproviamo quindi a riprodurre il comportamento ottenuto in precedenza utilizzando la classe ByGameGenreDataTemplateSelector mediante l'uso dei DataTrigger.

<DataTemplate.Triggers>
  <DataTrigger Binding="{Binding Path=Game.Genre}">
    <DataTrigger.Value>
      <FairPlay:GameGenre>Rpg</FairPlay:GameGenre>
    </DataTrigger.Value>
    <Setter TargetName="Border" Property="Background">
      <Setter.Value>
        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
          <GradientStop Color="LightSlateGray" Offset="0.0" />
          <GradientStop Color="SteelBlue" Offset="1.0" />
        </LinearGradientBrush>
      </Setter.Value>
    </Setter>
  </DataTrigger>
</DataTemplate.Triggers>

Utilizzando l'ormai consueta Object Element Sintax e l'Attribute Syntax istanziamo l'oggetto DataTrigger e impostiamo la proprietà Binding e tramite la Property Element Syntax impostiamo il valore enumerato GameGenre.Rpg da utilizzare nel confronto. Quando quest'ultimo è uguale alla proprietà Game.Genre questo fa scattare il trigger, impostando mediante l'utilizzo del Setter il nuovo valore della proprietà Background dell'elemento Border.

L'unica modifica apportata al template all'infuori di quelle inerenti alla definizione del DataTrigger, riguarda l'assegnazione di un nome all'oggetto Border così da poterlo recuperare dal Setter mediante l'utilizzo della proprietà TargetName.

Se presi dalla curiosità, avete provato a selezionare un qualsiasi item della ListBox è facile notare che la ListBox non fornisce più un feedback congruo e chiaro al nuovo aspetto definito mediante l'uso del DataTemplate. Senza cadere nella tentazione di definire l'aspetto dell'item selezionato modificando una dei DataTemplate, rivediamo invece quanto fatto fino ad adesso. Come il nome suggerisce l'oggetto DataTemplate dovrebbe essere utilizzato solo per il layout dell'oggetto da visualizzare e questo mal si sposa con il definire in un template uno sfondo con l'unico scopo di "abbellire" l'elemento.

5 pagine in totale: <<Indietro 1 [2] 3 4 5 Avanti >>

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.



TUTORIALS


IN EVIDENZA
MISC