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.
Approfondimenti
Avviare una registrazione audio e video in una applicazione della Universal Windows Platform
Gestione dei token negli input di testo con la Universal Windows Platform
Winget: un nuovo package manager per Windows
Dark mode e selezione dei temi in un'applicazione Xamarin Forms
Chiamare API WinRT da applicazioni .NET 5
Personalizzare gli elementi del controllo SwipeView in Xamarin Forms
Il controllo XAML SwitchPresenter nella Universal Windows Platform
Effettuare il multibinding in un'applicazione Xamarin Forms
Validazione dei parametri con le Guard API della Universal Windows Platform
Sviluppare applicazioni con supporto al doppio schermo con Xamarin
C#/WinRT: integrare l'ecosistema di Windows 10 nelle applicazioni .NET
Il futuro delle applicazioni Windows con .NET 5
I più letti di oggi
- Blazor Conference 2021 - Online
- Track 1: @dbochicchio e @cristiancivera con 'Blazor for absolute beginners'Track 2: @apomic80 con 'Dynamic UI with Blazor WebAssembly'Track 3: #aspilive Seguici live su => https://aspit.co/BlazorConf-21
- Track 1: @GiampaoloTUCCI con 'Progressive Web Apps with Blazor'Track 2: @dottor con 'Blazor Tips&Tricks'Track 3: #aspilive Seguici live su => https://aspit.co/BlazorConf-21
- Un datagrid con ordinamento con ASP