Col SP1 del framework 3.5 è stato introdotto il namespace System.ComponentModel.DataAnnotations il quale ha al suo interno degli interessanti attributi di validazione (dettagli qui)
Ad esempio, volendo validare una proprietà del nostro ViewModel, quello che dobbiamo fare è semplicemente scrivere del codice come quello che segue dopo aver aggiunto un riferimento a System.ComponentModel.DataAnnotations:
1: public class MyViewModel:INotifyPropertyChanged
2: {
3: private string userName;
4:
5: [StringLength(10)]
6: public string UserName
7: {
8: get
9: {
10: return this.userName;
11: }
12:
13: set
14: {
15: this.Validate(value, "UserName");
16: this.userName = value;
17: this.OnPropertyChanged("UserName");
18: }
19: }
20:
21: protected void Validate(object value, string propertyName)
22: {
23: Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = propertyName });
24: }
25:
26: public void ValidateAll()
27: {
28: Validator.ValidateObject(this, new ValidationContext(this, null, null));
29: }
30:
31: //Other stuff removed for brevity...
32:
33: }
A questo punto usando un DataForm in Silverlight 3 oppure questo XAML in WPF:
1: <TextBox Text="{Binding UserName, ValidatesOnExceptions=true, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
2: HorizontalAlignment="Left"
3: VerticalAlignment="Top" />
quando il contenuto della TextBox supera i 10 caratteri ottengo la classica segnalazione di errore di validazione:
Interessante vero?
Peccato che Microsoft si sia dimenticata di inserire questa assembly nel client profile del .NET FX 4.0 che è la configurazione predefinita quando create una nuova applicazione WPF 4.0, ciò significa dovere passare al full profile solo per poter sfruttare questa interessante opportunità.
Non tutto è però perduto, potete andare qui: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=508846 e mostrare tutto il vostro disappunto votando affinchè venga incluso nella RTM.