Avalon databinding
Vi ricordate qualche post fa? Abbiamo parlato del property change notification, ovvero della possibilità di notificare automaticamente la UI di modifiche avvenute all'interno di un source item. Ci siamo addentrati nel codice del code-behind, oggi vedremo la parte relativa a XAML.
Inseriremo all'interno di un'elemento Resources due oggetti: un riferimento alla collezione Valutazioni (definitiva nel code-behind) e un DataTemplate per personalizzare l'aspetto di ogni singolo LIstBoxItem in binding. Termina il sorgente la definizione della ListBox con le proprietà ItemsSource e ItemTemplate opportunamente impostate.
<?Mapping XmlNamespace="NamespaceDiMapping" ClrNamespace="DevLeap" ?>
<DockPanel xmlns="..." xmlns:x="..." xmlns:c="NamespaceDiMapping" >
<DockPanel.Resources>
<c:Valutazioni x:Key="FonteDati"/>
<DataTemplate x:Key="ValutazioneTemplate">
<Canvas ...>
<TextBlock ... TextContent="{Binding Path=Auto}"/>
<TextBlock ... TextContent="€" />
<TextBlock .... TextContent="{Binding Path=Prezzo}"/>
</Canvas>
</DataTemplate>
</DockPanel.Resources>
<ListBox ...
ItemsSource="{Binding Source={StaticResource FonteDati}}"
ItemTemplate="{StaticResource ValutazioneTemplate}"/>
</DockPanel>
Da notare la definizione del mapping fra il namespace CLR che contiene la definizione della collection Valutazioni e un namespace per il contenuto xaml.
I puntini di sospensione nel sorgente xaml contengono banale codice di formattazione (background, width, height), ho preferito ometterlo per mantenere più chiari i concetti di binding.
Nota: potevamo anche impostare le Resources a livello application per condividere tali informazioni per tutte le page.