Nello script #37 (https://www.silverlightitalia.com/script/37/Gestione-Dati-Data-Binding-Silverlight-2.0-Converters.aspx) abbiamo visto come sia possibile gestire i valori in binding in modo da associarli ad una proprietà di un controllo, lasciando inalterato il dato originale.
Nell'utilizzo quotidiano è frequente avere proprietà booleane di entità che influenzano grafica e comportamenti come visibilità, colore o altro. Se realizziamo un IValueConverter per ogni scenario è molto probabile che il progetto si affolli di molte classi di codice molto simile. Per ridurre gli oggetti da mantenere possiamo sfruttare i generics e inserire delle proprietà al nostro converter, in modo da specifiare l'oggetto da restituire in funzione di un valore True o False.
Nello snippet seguente vediamo il codice di tale converter:
public class BoolToValueConverter<T> : IValueConverter { public T FalseValue { get; set; } public T TrueValue { get; set; } public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { T returnValue; if (value == null) { returnValue = FalseValue; } else { bool innerValue = (bool)value; if (innerValue) { returnValue = TrueValue; } else { returnValue = FalseValue; } } return returnValue; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value != null) { return value.Equals(TrueValue); } else { return false; } } }
Per utilizzarlo è sufficiente estendere la classe con una che specifichi il tipo di oggetto gestito:
public class BoolToVisibilityConverter : BoolToValueConverter<Visibility>{ }
Come di consueto dobbiamo registrare l'oggetto tra le risorse, specificando i valori nelle proprietà TrueValue e FalseValue che abbiamo aggiunto:
<UserControl.Resources> <converters:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" TrueValue="Visible" FalseValue="Collapsed" />
L'utilizzo non differisce dai converter tradizionali:
Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisibilityConverter}}"
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Elencare le container images installate in un cluster di Kubernetes
Utilizzare un service principal per accedere a Azure Container Registry
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Utilizzare i primary constructor in C#
Gestire liste di tipi semplici con Entity Framework Core
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Limitare le richieste lato server con l'interactive routing di Blazor 8
Gestire errori funzionali tramite exception in ASP.NET Core Web API
Applicare il versioning ai nostri endpoint ASP.NET Core Minimal API
Creazione di componenti personalizzati in React.js con Tailwind CSS
Utilizzare Tailwind CSS all'interno di React: primi componenti