L'infrastruttura di Binding è senza ombra di dubbio una delle caratteristiche più apprezzate delle moderne piattaforme di sviluppo.
A renderlo più flessibile inoltre c'è la possibilità di trasformare un valore in un altro e viceversa mediante l'utilizzo di classi che implementano l'interfaccia IValueConverter.
Anche se questo meccanismo può sembrare flessibile da adattarsi a qualsiasi scenario, in casi particolari si possono riscontrare dei limiti.
È il caso sella proprietà ConverterParameter, sulla quale non è possibile applicare nessuna espressione di Binding, rendendo di fatto questo parametro pressoché statico.
Questo limite è facilmente aggirabile facendo ereditare la classe che implementa l'interfaccia IValueConverter dal tipo DependencyObject.
public class ValueConvert : DependencyObject, IValueConverter
{
public static readonly DependencyProperty PropertyProperty = DependencyProperty.Register(
"Property", typeof (string), typeof (ValueConvert), new PropertyMetadata(string.Empty));
public string Property
{
get { return (string) GetValue(PropertyProperty); }
set { SetValue(PropertyProperty, value); }
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
//uso la proprietà Property al posto del parametro parameter
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Una volta creato il converter possiamo aggiungerlo alle risorse e utilizzarlo come da consuetudine.
<comverters:ValueConvert x:Key="ValueConverter" Property="{Binding MyProperty}" />
L'unica particolarità consiste nel non utilizzare il parametro "parameter" passato al metodo Convert ma la proprietà creato allo scopo.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Generare la software bill of material (SBOM) in GitHub
Utilizzare Hybrid Cache in .NET 9
Usare il colore CSS per migliorare lo stile della pagina
Creare una libreria CSS universale: Clip-path
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Gestione file Javascript in Blazor con .NET 9
Rendere le variabili read-only in una pipeline di Azure DevOps
Gestire la cancellazione di una richiesta in streaming da Blazor
Gestione dei nomi con le regole @layer in CSS
Utilizzare i variable font nel CSS
Collegare applicazioni server e client con .NET Aspire
Creare un webhook in Azure DevOps
I più letti di oggi
- Creare agenti facilmente con Azure AI Agent Service
- Loggare le query più lente con Entity Framework
- Disabilitare le run concorrenti di una pipeline di Azure DevOps
- Rendere i propri workflow e le GitHub Action utilizzate più sicure
- Gestione degli eventi nei Web component HTML
- Fornire parametri ad un Web component HTML
- Utilizzare Hybrid Cache in .NET 9