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
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
Gestire errori funzionali tramite exception in ASP.NET Core Web API
Usare le collection expression per inizializzare una lista di oggetti in C#
Aggiungere interattività lato server in Blazor 8
Determinare lo stato di un pod in Kubernetes
Installare le Web App site extension tramite una pipeline di Azure DevOps
Elencare le container images installate in un cluster di Kubernetes
Criptare la comunicazione con mTLS in Azure Container Apps
Utilizzare database e servizi con gli add-on di Container App
Trasformare qualsiasi backend in un servizio GraphQL con Azure API Management
I più letti di oggi
- PWAConf 2020 - Online
- Reactive form tipizzati con FormBuilder in Angular
- Utilizzare ChatGPT con Azure OpenAI
- Mantenere sempre reattiva una Lambda di AWS
- Messaggi in tempo reale con Blazor Server
- Una chat con #aspnetcore e #websockets https://aspit.co/bmh di @GentiliMoreno #webapi #aspnetcore2
- Autenticarsi in modo sicuro su Azure tramite GitHub Actions
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Creare una MarkupExtension per accedere alle proprietà statiche in Silverlight 5.0
- Navigare la struttura visuale di un UIElement fino a recuperare l'elemento logico in Silverlight 3.0