In Silverlight 3.0 l'engine di data binding è stato arricchito delle funzionalità di intercettazione degli errori di validazione, qualora un dato immesso dall'utente non rispetti precise regole definite nel codice.
Come introdotto nell'articolo https://www.silverlightitalia.com/articoli/silverlight/le-novita-silverlight-3.0-beta-1-p-5.aspx, questo è possibile valorizzando a true l'attributo ValidateOnExceptions e lanciando un'eccezione nel set della proprietà in binding con modalità TwoWay.
In alcuni scenari sollevare un'eccezione nel set di una proprietà potrebbe non essere applicabile: in Silverlight 4.0 è stato aggiunto l'attributo ValidatesOnDataErrors attraverso cui possiamo gestire i messaggi di validazione elaborati implementando l'interfaccia IDataErrorInfo nelle nostre entità.
Per implementare l'interfaccia occorre inserire la proprietà Error che può contenere i messaggi di errore di tutta l'entità, e un indicizzatore di default, con il quale possiamo intercettare la valorizzazione di ciascuna proprietà e restituire una semplice stringa come messaggio di errore qualora non siano rispettate le nostre regole di validazione.
#region IDataErrorInfo Members public string Error { get { return null; } } public string this[string columnName] { get { switch (columnName) { case "FirstName": if (string.IsNullOrEmpty(this.FirstName)) { return "* campo obbligatorio"; } break; } return null; } } #endregion
Come abbiamo detto, nel markup è sufficiente specificare l'attributo ValidatesOnDataErrors:
<TextBox Text="{Binding FirstName, Mode=TwoWay, ValidatesOnDataErrors=True, NotifyOnValidationError=True}" />
Nel nostro esempio, in caso di assenza di valore, avremo il seguente risultato:
Nella definizione dell'espressione di binding dell'esempio precedente è specificato anche l'attributo NotifyOnValidationError a true, se andiamo ad inserire il controllo ValidationSummary avremo automaticamente il riepilogo (dinamico) di tutti gli errori generati:
Nel codice allegato è possibile trovare la completa implementazione.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Migliorare la scalabilità delle Azure Function con il Flex Consumption
- Accettare un tipo nativo nel body di una richiesta a ASP.NET Web API
- Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
- Chiamare direttamente un numero di telefono con HTML5
- Utilizzare la direttiva ngIf di Angular per renderizzare o meno template HTML