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
Gestire undefined e partial nelle reactive forms di Angular
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Migliorare la sicurezza dei prompt con Azure AI Studio
Eseguire attività pianificate con Azure Container Jobs
Usare un KeyedService di default in ASP.NET Core 8
Utilizzare Tailwind CSS all'interno di React: primi componenti
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Generare la software bill of material (SBOM) in GitHub
Miglioramenti agli screen reader e al contrasto in Angular
Ordinare randomicamente una lista in C#
Usare lo spread operator con i collection initializer in C#