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
Migliorare la sicurezza dei prompt con Azure AI Studio
.NET Conference Italia 2024
Proteggere le risorse Azure con private link e private endpoints
Le novità di Angular: i miglioramenti alla CLI
Gestione dei nomi con le regole @layer in CSS
Eseguire script pre e post esecuzione di un workflow di GitHub
Gestire i dati con Azure Cosmos DB Data Explorer
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Assegnare un valore di default a un parametro di una lambda in C#
Utilizzare Copilot con Azure Cosmos DB
Utilizzare i primary constructor di C# per inizializzare le proprietà