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
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Ottenere un token di accesso per una GitHub App
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Effettuare il refresh dei dati di una QuickGrid di Blazor
Gestione CSS in Blazor con .NET 9
Gestione degli eventi nei Web component HTML
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Loggare le query più lente con Entity Framework
La gestione della riconnessione al server di Blazor in .NET 9