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
Le novità di Angular: i miglioramenti alla CLI
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Effettuare il refresh dei dati di una QuickGrid di Blazor
Referenziare un @layer più alto in CSS
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Implementare l'infinite scroll con QuickGrid in Blazor Server
Creare una libreria CSS universale: Clip-path
Gestire la cancellazione di una richiesta in streaming da Blazor
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Sostituire la GitHub Action di login su private registry
I più letti di oggi
- Autorizzazione basata su policy in ASP.NET Core
- Passare dati in binding a un Component in Angular2
- Speciale per il lancio di Visual Studio 2008, SQL Server 2008 e Windows Server 2008 dal 25/02 al 07/03
- Mono 1.9 in versione stabile
- Microsoft Security Bulletin MS04-039
- Nuova preview per Expression Interactive Designer
- Tech-ed 2007: annunciati Visual Studio 2008 e Sql Server 2008
- ASP.NET vNext
- Data access with LiteDB in Blazor