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 +"]");
}
}
}
Моя проблема в том, что проверка запускается только один раз - когда я открываю окно. Как заставить его работать при каждом нажатии клавиши?