Una delle novità introdotte con la Universal Windows Platform, è il Compiled Binding.
Questa funzionalità ha l'obbiettivo di rendere più efficente e debuggabile il meccanismo di data binding a cui ormai siamo abituati. Il binding "non compilato" inafatti, basava il suo funzionamento sul meccanismo delle reflection e su l'utilizzo di stringhe come binding keyword, andando intrisecamente a peggiorare le performance della nostra app e a rendere più error prone il nostro codice.
Con il compiled binding questi problemi sono stati risolti poichè adesso ogni oggetto sottoposto a Binding viene validato a compile time. La validazione avviene andando a ricercare un riferimento alla proprietà sottoposta a binding nella classe a cui la View fa riferiemento (più banalmente, il file di code-behind della nostra view).
Utilizzare il compiled binding, la direttiva x:Bind
Nell'esempio riportato in basso possimo vedere come impostare il binding lato view, e come la proprietà Name sia presente nella classe di code behind.
MainPage.xaml
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <TextBlock Text="{x:Bind Name}" Foreground="Black" HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource HeaderTextBlockStyle}" /> </Grid>
MainPage.xaml.cs
public sealed partial class MainPage : Page { public string Name { get { return "Giancarlo Lelli"; } } public MainPage() { InitializeComponent(); } }
Tuttavia esistono alcune differenze che è opportuno sottolineare rispetto al precedente meccanismo di Binding, ad esempio:
- Il meccanismo di ricerca della proprietà all'interno del file di code behind non può essere modificato;
- La modalità di binding predefinita per la direttiva x:Bind è OneTime;
La direttiva x:Bind per invocare dei metodi
Sempre grazie al nuovo compiled binding è possibile fare il binding di un metodo ad un particolare command/event handler, eliminando così la necessità di utilizzare l'interfaccia ICommand o un suo derivato. Di seguito possiamo trovare un esempio.
MainPage.xaml
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Button Click="{x:Bind Run}" Content="Run" HorizontalAlignment="Center" VerticalAlignment="Center" /> </Grid>
MainPage.xaml.cs
public sealed partial class MainPage : Page { public MainPage() { InitializeComponent(); } public void Run() { Debug.WriteLine("Binded with x:Bind!"); } }
Risultato alla pressione del button:
Il compiled binding e i data template: la keyword x:DataType
Un data template non ha un contesto al momento della compilazione, percui affinchè il meccanismo di tipizzazione forte dei nostri binding funzioni è necessario utilizzare la direttiva x:DataType. Nell'esempio sottostante possiamo vedere come è possibile specificate il DataType nel DataTemplate e poi continuare ad utilizzare, come nell'esempio precedente, la direttiva x:Bind per esplicitare il binding.
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <ListView ItemsSource="{x:Bind Dudes}"> <ListView.ItemTemplate> <DataTemplate x:DataType="local:Person"> <StackPanel Margin="50"> <TextBlock Text="{x:Bind Firstname}" /> <TextBlock Text="{x:Bind Lastname}" /> </StackPanel> </DataTemplate> </ListView.ItemTemplate> </ListView> </Grid>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare il trigger SQL con le Azure Function
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Miglioramenti agli screen reader e al contrasto in Angular
Short-circuiting della Pipeline in ASP.NET Core
Elencare le container images installate in un cluster di Kubernetes
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
Sfruttare i KeyedService in un'applicazione Blazor in .NET 8
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Implementare l'infinite scroll con QuickGrid in Blazor Server
Utilizzare gli snapshot con Azure File shares
I più letti di oggi
- Utilizzare WebAssembly con .NET, ovunque
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- Utilizzare il trigger SQL con le Azure Function
- Ottimizzazione dei block template in Angular 17
- Disabilitare automaticamente un workflow di GitHub (parte 2)