XAML 带UpdateSourceTrigger的ValidationRule =当文本框失去焦点时,不激发LostFocus

mwyxok5s  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(104)

我试图在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焦点正在适当地改变。
我需要验证规则在框失去焦点时触发,即使没有输入任何内容。有可能做到吗?我错在哪里?

xxslljrj

xxslljrj1#

声明验证规则时,将ValidatesOnTargetUpdated设置为true

<validationrules:RequiredValidationRule ValidatesOnTargetUpdated="True" FieldName="Agency"/>

相关问题