Una delle novità più importanti presenti in Windows Presentation Foundation è costituita dalle funzionalità di Binding che, forti dell'esperienza proveniente da WinForms, si dimostrano ancora più potenti e flessibili.
Nelle applicazioni che fanno uso di dati l'uso del Binding è quindi obbligatorio e molto probabilmente si presenta anche la necessita di validare i dati immessi dall'utente.
A tale scopo l'oggetto Binding dispone di una proprietà ValidationRules, una collezione di classi astratte ValidationRule che hanno il compito di processare il valore immesso e indicare se è valido o meno. Sebbene è consigliabile implementare queste logiche a livello di entità, in modo indipendente dalla tecnologia di presentazione che si sta usando, i ValidationRule permettono sia un ulteriore filtro per vincolare il tipo del dato che la proprietà di destinazione può accettare, sia un modo per conoscere e mostrare gli errori riscontrati nell'entità. Per esempio l'interfaccia System.ComponentModel.IDataErrorInfo è nata per questo scopo e può essere usata per fornire informazioni di validazione.
L'esempio che segue mostra un'ipotetica classe di validazione di interi:
public class Int32ValidationRule : ValidationRule { public override ValidationResult Validate(object value, CultureInfo cultureInfo) { // Controllo che il valore non sia nullo if (value != null) { Int32 result; // Se è già un numero o un numero valido if (value is Int32 || Int32.TryParse(value.ToString(), out result)) return ValidationResult.ValidResult; } // In tutti gli altri casi il valore non è un numero return new ValidationResult(false, "Valore non valido"); } }
L'implementazione è abbastanza semplice e consiste nell'implementare il metodo Validate e restituire un tipo ValidateResult che contiene l'esito e un oggetto d'errore che può essere poi usato per i messaggi di notifica.
Per utilizzare la classe occorre inserirla nella collezione ValidationRules dell'oggetto Binding. Il markup che segue mostra una TextBox e un TextBlock che indica il numero inserito. In caso di validazione fallita la TextBox automaticamente viene bordata di rosso:
<TextBox> <TextBox.Text> <Binding Path="Text" ElementName="number"> <Binding.ValidationRules> <local:Int32ValidationRule /> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> <!-- Label per mostrare il numero --> <TextBlock Grid.Row="1"> <TextBlock>Numero: </TextBlock> <TextBlock x:Name="number" /> </TextBlock>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.