ValidationRule Red Border Issue

В своем приложении WPF я создал ValidationRules для моих текстовых полей, чтобы он не позволял пустой строке работать нормально и отображать красную рамку с текстом, сообщающим пользователю, что он не может быть пустым. Когда приложение запускается, все поля пустые, ожидая ввода, но я все еще вижу красную рамку вокруг них. Это нормальное поведение? Примечание. Я бы предпочел, чтобы оно срабатывало после запуска события changechange или lostfocus, когда пользователь использует форму, а не при первоначальной загрузке формы.

Пример проверки, которую я делаю:

 <TextBox x:Name="itemNum" HorizontalAlignment="Left" Height="23" Margin="82,58,0,0"     VerticalAlignment="Top" Width="90"
            HorizontalContentAlignment="Left" VerticalContentAlignment="Center" PreviewKeyDown="ItemNum_PreviewKeyDown" 
            PreviewTextInput="ItemNum_PreviewTextInput" TabIndex="0" Validation.ErrorTemplate="{StaticResource validationErrorTemplate}">
            <TextBox.Text>
                <Binding Path="rxID" Mode="TwoWay" StringFormat="{}{0:#}" UpdateSourceTrigger="PropertyChanged">
                    <Binding.ValidationRules>
                        <MY:TextBoxNotEmptyValidationRule x:Name="rxIDValidation" ValidatesOnTargetUpdated="True" />
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
        </TextBox>

Мой TextBoxNotEmptyValidationRule Класс:

public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
     {
        string str = value as string;
        if (string.IsNullOrEmpty(str))
        {
            return new ValidationResult(false, "Value CAN NOT BE empty");
        }
        return ValidationResult.ValidResult;
    }

2 ответа

По твоей логике кажется, что это нормально. Позволяет определить флаг bool и установить его в значение false или true, не имеет значения, чем при запуске приложения и проверке флага, если значение флага является начальным значением, ничего не делать. Кроме того, проверка "если" должна проверять также и выделенный элемент. Если сфокусированный элемент - это наше текстовое поле, а ваш флаг не является начальным значением, вы можете изменить границу текстового блока.

Вы можете посмотреть по следующей ссылке: Проверка при загрузке

В идеале это нормальное поведение в приложениях XAML, если вы используете IDataErorInfo или INotifyDataErrorInfo . Вы можете использовать beginInit и EndInit для достижения желаемого результата.

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