lunedì 12 marzo 2012

Convalida incrementale in WPF

WPF fornisce il più ricco ambiente per sviluppatori di incorporare le classi di validazione indipendenti nel loro interfacce utente e per gli sviluppatori oggetto business per supportare l'interfaccia utente di un'applicazione.
Come si fa a garantire che gli sviluppatori che utilizzano gli oggetti di business comprendono anche il codice necessario convalida per garantire che solo i dati buoni viene passato alla proprietà della classe '? Ho guardato le tre interfacce che consentono di inserire il codice di convalida nella tua classe, mentre l'integrazione con l'interfaccia utente di un'applicazione, e annotazioni di dati che consentono di separare il codice di convalida dalla classe. WPF include un'altra opzione che consente agli sviluppatori di aggiungere in modo incrementale regole di convalida alle loro interfacce utente.

WPF può creare ValidationRules che gli sviluppatori possono legarsi ai controlli a cui è vincolato l'immobile.ValidationRules consentono allo sviluppatore dell'interfaccia utente di mix-and-match il codice di validazione fornito.Questo ha senso in alcuni scenari in cui si applicano le regole di convalida e altri in cui non lo fanno. È possibile costruire una logica comune di convalida che si applica in tutti gli scenari nel vostro business class, quindi fornire una serie di ValidaitonRules che gli sviluppatori possono aggiungere (o omettere) a seconda dello scenario.
Per creare una regola di convalida, si aggiunge una classe che eredita dalla classe ValidationRule base. Dopo di che, basta sostituire la classe di 'metodo Validate, che verrà passato il valore del controllo a cui è associato il ValidationRule.Il metodo deve restituire un ValidationResult che contiene un codice di riuscita (True o False) e un messaggio di errore:
Public Class CustomerIDCase
    Inherits ValidationRule

    Public Function Overrides Validate (ByVal value As Object,
                               ByVal cultureInfo Come System.Globalization.CultureInfo) _
                               Come System.Windows.Controls.ValidationResult
      StrValue Dim As String = value.ToString
       
      Se Text.RegularExpressions.Regex.IsMatch (strValue, "[az]") Then
        Return New ValidationResult (False, "CustomerID deve essere tutto maiuscolo")
      Altro
        Return New ValidationResult (True, Nothing)
      End If
    End Function
  End Class
Per applicare il ValidationRule, lo sviluppatore dell'interfaccia utente deve prima aggiungere un namespace XML che fa riferimento al namespace del progetto ValiationRule (in questo caso, CustomerValidation):
<Window ...
   xmlns: l = "clr-namespace: CustomerValidation"
Lo sviluppatore può quindi aggiungere la regola di convalida per la raccolta ValidationRules qualsiasi controllo. Questo esempio, utilizzando XAML basato su elementi di sintassi per le proprietà di impostazione, aggiunge l'esempio CustomerIDCase regola a una TextBox:
<TextBox …>
    <TextBox.Text>
      <Binding Path = "CustomerID" 
              Mode = UpdateSourceTrigger "TwoWay" = "LostFocus">
        <Binding.ValidationRules>
          <l:CustomerIDCase/>
        </ Binding.ValidationRules>
      </ Binding>
    </ TextBox.Text>
  </ TextBox>
I messaggi di errore generati dal ValidationRule verrà automaticamente indirizzato alla UI e visualizzati là - lo sviluppatore non hanno nemmeno bisogno di impostare l'attributo ValidateOnDataErrors.
Purtroppo, rinunciare ad un certo livello di controllo qui, ora dovete contare sulla sviluppatore dell'interfaccia utente di applicare le regole di validazione giuste nel livello di presentazione. Ma voi avete liberato il progettista dell'interfaccia utente dal dover preoccuparsi di logica di business in modo che il progettista può concentrarsi sulla creazione dell'interfaccia utente dell'applicazione. E, a condizione che il ValidationRule viene applicato dallo sviluppatore dell'interfaccia utente, hai assicurato che è il codice di convalida che è usato. Chi sa che cosa gli sviluppatori dell'interfaccia utente sarebbe venuto con il proprio?


Nessun commento:

Posta un commento