Per strutturare architetturalmente meglio le applicazioni che sviluppiamo con la Universal Windows Platform, spesso facciamo uso di pattern come Model-View-ViewModel (MVVM) che aiutano ad avere una forte separazione tra quella che è la UI e il resto del codice che contiene la logica di business. Uno svantaggio di questo approccio è che alcune proprietà hanno necessità di fare uso dei converter per essere utilizzate correttamente nella UI, richiedendo quindi logica aggiuntiva: un caso noto è quello relativo alle property booleane, usate spesso per mostrare o nascondere contenuti grafici, hanno bisogno necessariamente del classico "BoolToVisibilityConverter", strutturato più o meno come segue:
public class BoolToVisibilityConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, string language) { return (value is bool && (bool)value) ? Visibility.Visible : Visibility.Collapsed; } // ... }
<Grid Visibility="{Binding ViewModel.ShowItems, Converter={StaticResource BoolToVisibilityConverter}}" />
Con l'introduzione di Windows 10, e in particolare dell'Anniversary Update, è stata introdotta anche l'estensione di markup x:Bind di cui abbiamo già parlato in alcuni script precedenti, che in alternativa a Binding viene eseguito in minor tempo e con minor consumo di memoria. La particolarità di questa keyword è che permette di effettuare il casting inline, eliminando di fatto l'esigenza di costruire converter aggiuntivi:
<Grid Visibility="{x:Bind (Visibility)ViewModel.ShowItems}" />
Non solo verrà meno l'esigenza di dover scrivere meno codice, ma il tutto risulterà allo stesso tempo più leggibile.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Utilizzare la session affinity con Azure Container Apps
Utilizzare domini personalizzati gestiti automaticamente con Azure Container Apps
Gestire undefined e partial nelle reactive forms di Angular
Eseguire query verso tipi non mappati in Entity Framework Core
Usare un KeyedService di default in ASP.NET Core 8
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
.NET Conference Italia 2023
Generare file PDF da Blazor WebAssembly con iText
Usare Refit e Polly in Blazor per creare client affidabili e fortemente tipizzati
Gestire i null nelle reactive form tipizzate di Angular
Utilizzare gli snapshot con Azure File shares