Condividi tramite


Procedura: implementare la convalida dell'associazione

In questo esempio viene mostrato come utilizzare un oggetto ErrorTemplate e un trigger dello stile per fornire un feedback visivo e informare l'utente quando viene immesso un valore non valido in base a una regola di convalida personalizzata.

Esempio

Il contenuto di testo dell'oggetto TextBox dell'esempio seguente è associato alla proprietà Age (di tipo int) di un oggetto origine di associazione denominato ods. L'associazione viene configurata per utilizzare una regola di convalida denominata AgeRangeRule in modo che se l'utente immette caratteri non numerici o un valore inferiore a 21 o maggiore di 130, accanto alla casella di testo viene visualizzato un punto esclamativo rosso e quando l'utente sposta il mouse sulla casella di testo viene visualizzata una descrizione comandi con il messaggio di errore.

<TextBox Name="textBox1" Width="50" FontSize="15"
         Validation.ErrorTemplate="{StaticResource validationTemplate}"
         Style="{StaticResource textBoxInError}"
         Grid.Row="1" Grid.Column="1" Margin="2">
  <TextBox.Text>
    <Binding Path="Age" Source="{StaticResource ods}"
             UpdateSourceTrigger="PropertyChanged" >
      <Binding.ValidationRules>
        <c:AgeRangeRule Min="21" Max="130"/>
      </Binding.ValidationRules>
    </Binding>
  </TextBox.Text>
</TextBox>

Nell'esempio seguente viene mostrata l'implementazione di AgeRangeRule che eredita da ValidationRule ed esegue l'override del metodo Validate. Il metodo Int32.Parse() viene chiamato sul valore per assicurarsi che non contenga caratteri non validi. Il metodo Validate restituisce ValidationResult che indica se il valore è valido in base al fatto che venga rilevata un'eccezione durante l'analisi e che il valore di durata non rientri nell'intervallo compreso tra i limiti inferiore e superiore.

public class AgeRangeRule : ValidationRule
{
    private int _min;
    private int _max;

    public AgeRangeRule()
    {
    }

    public int Min
    {
        get { return _min; }
        set { _min = value; }
    }

    public int Max
    {
        get { return _max; }
        set { _max = value; }
    }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        int age = 0;

        try
        {
            if (((string)value).Length > 0)
                age = Int32.Parse((String)value);
        }
        catch (Exception e)
        {
            return new ValidationResult(false, "Illegal characters or " + e.Message);
        }

        if ((age < Min) || (age > Max))
        {
            return new ValidationResult(false,
              "Please enter an age in the range: " + Min + " - " + Max + ".");
        }
        else
        {
            return new ValidationResult(true, null);
        }
    }
}

Nell'esempio seguente viene mostrato l'oggetto ControlTemplate validationTemplate personalizzato che crea un punto esclamativo rosso per notificare all'utente un errore di convalida. I modelli di controllo vengono utilizzati per ridefinire l'aspetto di un controllo.

<ControlTemplate x:Key="validationTemplate">
  <DockPanel>
    <TextBlock Foreground="Red" FontSize="20">!</TextBlock>
    <AdornedElementPlaceholder/>
  </DockPanel>
</ControlTemplate>

Come mostrato nell'esempio seguente, l'oggetto ToolTip che visualizza il messaggio di errore viene creato utilizzando lo stile denominato textBoxInError. Se il valore di HasError è true, il trigger imposta la descrizione comandi dell'oggetto TextBox corrente sul primo errore di convalida. L'oggetto RelativeSource viene impostato su Self che fa riferimento all'elemento corrente.

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
  <Style.Triggers>
    <Trigger Property="Validation.HasError" Value="true">
      <Setter Property="ToolTip"
        Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                        Path=(Validation.Errors)[0].ErrorContent}"/>
    </Trigger>
  </Style.Triggers>
</Style>

Per l'esempio completo, vedere Esempio Binding Validation (la pagina potrebbe essere in inglese).

Notare che se non si fornisce un oggetto ErrorTemplate personalizzato, il modello di errori predefinito sembra fornire un feedback visivo all'utente, quando si verifica un errore di convalida. Per ulteriori informazioni, vedere "Convalida dei dati" in Cenni preliminari sull'associazione dati. Inoltre, in WPF viene fornita una regola di convalida incorporata che rileva le eccezioni generate durante l'aggiornamento della proprietà dell'origine di associazione. Per ulteriori informazioni, vedere ExceptionValidationRule.

Vedere anche

Concetti

Cenni preliminari sull'associazione dati

Altre risorse

Procedure relative all'associazione dati