2013-06-22 4 views

risposta

43

ValidatesOnNotifyDataErrors e ValidatesOnDataErrors vengono utilizzati quando si desidera un XAML controllo associato per convalidare il suo ingresso in base a un'interfaccia implementata nel ViewModel/Model, per ValidatesOnNotifyDataErrors quell'interfaccia è INotifyDataErrorInfo e per ValidatesOnDataErrors i t è IDataErrorInfo.
per esempio diciamo che avete un modello di vista come questo:

class PersonViewModel : IDataErrorInfo { 

    public string FirstName {get; set;} 

    string IDataErrorInfo.Error 
    { 
     return string.Empty; 
    } 

    string IDataErrorInfo.this[string columnName] { 
     if (columnName == "FirstName" &&) { 
      if (this.FirstName.Length > 20) 
       return "FirstName can't be more than 20 characters."; 

     } 
     return string.Empty; 
    } 

} 

e quindi a suo avviso si dispone di una casella di testo che è legato alla proprietà FirstName come questo: <TextBox Text={Binding Path=FirstName, ValidatesOnDataErrors=True} /> ora se l'utente ha immesso 20 caratteri o più nella casella di testo verrà rilevato un errore.

D'altra parte NotifyOnValidationError viene utilizzato quando si desidera che un evento venga generato quando il limite non riesce alla convalida.

Io di solito uso ValidatesOnDataErrors nei miei controlli XAML per la convalida e non ho avuto bisogno degli altri due, quindi dipende dalla situazione.

MODIFICA: Sto aggiornando la mia risposta in quanto ho appreso alcune novità, quindi ho bisogno di renderlo più rilevante.

ValidatesOnDataErrors viene utilizzato nei client di spessore, ovvero in altre parole quando la convalida viene eseguita sul lato client come un'applicazione WPF o WinForm desktop e gli oggetti del modello implementano IDataErrorInfo.

D'altra parte, sarebbe una misura migliore per i thin client (applicazioni multi-tier) ValidatesOnNotifyDataErrors quali applicazioni client-server (Silverlight, WPF con WCF, ecc ..) in cui la validazione avviene sul server.

In questo modo quando l'utente digita qualcosa per esempio in un TextBox, il valore viene inviato al server in modo asincrono per la convalida, e quando i risultati di validazione ritornano viene generato un evento (evento per l'esattezza), poi il visualizza la selezione e la visualizza utilizzando il metodo appropriato, ovviamente in questo caso il modello implementerebbe INotifyDataErrorInfo.

+1

Un'altra cosa da notare ... è che INotifyDataErrorInfo è disponibile solo in .NET 4.5 e avanti ... e se si è bloccati a supportare Windows XP (e quindi non è possibile utilizzare .NET 4.5), allora si è bloccati con IDataErrorInfo invece di INotifyDataErrorInfo. – cplotts

Problemi correlati