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
Creare comandi nella dashboard .NET Aspire
Integrare SQL Server in un progetto .NET Aspire
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Gestire trasferimenti cloud con Azure Storage Mover
Le cron expression di un workflow di GitHub
Utilizzare WebJobs su Linux con Azure App Service
Eseguire query in contemporanea con EF
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Gestire progetti NPM in .NET Aspire
Utilizzare i variable font nel CSS
Analizzare il contenuto di una issue con GitHub Models e AI
Fissare una versione dell'agent nelle pipeline di Azure DevOps
I più letti di oggi
- Sfruttare una CDN con i bundle di ASP.NET
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Gli oggetti CallOut di Expression Blend 4.0
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Inserire le news di Punto Informatico nel proprio sito
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Le DirectInk API nella Universal Windows Platform
- Esaminare documenti XML con namespace utilizzando LINQ to XML


