我试图在WPF应用程序中实现表单数据的验证。
视图
<StackPanel Orientation="Horizontal" Margin="0 5 0 5">
<TextBlock Style="{StaticResource FormLabel}" Text="Agency:"/>
<TextBox x:Name="agency" Style="{StaticResource InputBox}" Margin="10 0 10 0"
Width="214" TabIndex="1" >
<Binding Path="Agency" UpdateSourceTrigger="LostFocus">
<Binding.ValidationRules>
<validationrules:RequiredValidationRule FieldName="Agency"/>
</Binding.ValidationRules>
</Binding>
</TextBox>
</StackPanel>
验证规则
public class RequiredValidationRule : ValidationRule
{
public static string GetErrorMessage(string fieldName, object fieldValue, object nullValue = null)
{
string errorMessage = string.Empty;
if (nullValue != null && nullValue.Equals(fieldValue))
errorMessage = string.Format("You cannot leave the {0} field empty.", fieldName);
if (fieldValue == null || string.IsNullOrEmpty(fieldValue.ToString()))
errorMessage = string.Format("You cannot leave the {0} field empty.", fieldName);
return errorMessage;
}
public string FieldName { get; set; }
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
string error = GetErrorMessage(FieldName, value);
if (!string.IsNullOrEmpty(error))
return new ValidationResult(false, error);
return ValidationResult.ValidResult;
}
}
我在验证规则中放置了一个断点,发现如果我在TextBox中单击或单击,然后单击或单击,则验证规则不会触发。但是,如果我在TextBox中单击或键入某些内容,然后删除它,然后Tab键就可以了。
我已经用GotFocus和LostFocus的虚拟事件验证了TextBox焦点正在适当地改变。
我需要验证规则在框失去焦点时触发,即使没有输入任何内容。有可能做到吗?我错在哪里?
1条答案
按热度按时间xxslljrj1#
声明验证规则时,将
ValidatesOnTargetUpdated
设置为true
。