WPF TextBox ValidationRule срабатывает только один раз

Я хочу создать простую проверку текстового поля в приложении WPF с помощью регулярных выражений. Вот так выглядит мой макет: нажмите.

TextBox и его ControlTemplate выглядят следующим образом:

<Window.Resources>
    <ControlTemplate x:Key="mailErrorTemplate">
        <DockPanel>
            <Grid Width="18" Height="18" DockPanel.Dock="Right">
                <Ellipse Width="18" Height="18" Fill="Red" HorizontalAlignment="Right"/>
                <TextBlock Foreground="White" FontWeight="Heavy" DockPanel.Dock="Top"
                    FontSize="14" HorizontalAlignment="Center" 
                    VerticalAlignment="Center" TextAlignment="Center"
                    ToolTip="{Binding ElementName=ErrorAdorner, 
                    Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">X</TextBlock>
            </Grid>
            <AdornedElementPlaceholder x:Name="ErrorAdorner"/>
        </DockPanel>
    </ControlTemplate>
</Window.Resources>


<TextBox Name="txtTo" Grid.Column="1" Grid.Row="0" Margin="10"
         Validation.ErrorTemplate="{StaticResource mailErrorTemplate}">
    <TextBox.Text>
        <Binding Path="Mail" TargetNullValue="" ValidatesOnExceptions="True" NotifyOnValidationError="True" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <local:MailValidator ValidatesOnTargetUpdated="True"/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

Хотя моя ValidationRule выглядит так:

class MailValidator : ValidationRule
{
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        if (value == null)
        {
            return new ValidationResult(false, "Cannot be empty");
        }

        string email = value as string;
        Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
        Match match = regex.Match(email);
        if (match.Success)
        {
            return ValidationResult.ValidResult;
        }
        else
        {
            return new ValidationResult(false, "Incorrect email format [" + email +"]");
        }
    }
}

Моя проблема в том, что проверка запускается только один раз - когда я открываю окно. Как заставить его работать при каждом нажатии клавиши?

0 ответов

Другие вопросы по тегам