Patrick Skelton Ответов: 1

Как я могу получить правила проверки в WPF, чтобы огонь на пустое текстовое поле?


Я не могу получить WPF ValidationRule для обнаружения пустого TextBox.

Мой сокращенный код выглядит следующим образом:
public class NonEmptyStringValidator : ValidationRule
{
    public override ValidationResult Validate( object value, CultureInfo cultureInfo )
    {
        ValidationResult validationResult = new ValidationResult( false, "Value cannot be empty." );
        if( value != null )
        {
            string valueAsString = value as string;
            if( valueAsString.Length > 0 )
                validationResult = ValidationResult.ValidResult;
        }
        return validationResult;
    }
}

Мой сокращенный XAML выглядит следующим образом:
<TextBox 

    <TextBox.Text>
        <Binding Path="SelectedUser.Username" UpdateSourceTrigger="LostFocus">
            <Binding.ValidationRules>
                <u:NonEmptyStringValidator/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

Точка останова, помещенная внутри Validate() функция показывает, что код не запускается до тех пор, пока в нем что-то не появится. TextBox Есть ли способ заставить его работать, чтобы обнаружить пустую строку?

Что я уже пробовал:

Я пробовал различные значения для UpdateSourceTrigger.

Я также пытался зацепиться за LostFocus событие для TextBox и написание кода для обработки этого вручную. Это становится очень грязным, потому что одна вещь, которую мне нужно сделать, - это сосредоточиться на TextBox пока есть что-то в нем, и зовет Focus() кажется, это вызывает LostFocus событие, чтобы снова выстрелить, что-то еще, чего я не понимаю.

1 Ответов

Рейтинг:
11

Patrick Skelton

Спасибо за ваш ответ.

В вашем поиске Google я вижу слово "вручную". Признаюсь, я не пытался этого сделать, потому что это казалось полной противоположностью тому, что я пытался сделать.

Ссылка на поиск кажется смешным количеством кода для чего-то настолько простого. Второй содержал ссылку на очень многообещающе названный "ValidatesOnTargetUpdated". Это, кажется, работает, но я получаю исключение null reference в представлении дизайна XAML, когда добавляю его в правило проверки. Я попытался поместить его в конструктор для ValidationRule, который снова работает, но снова я получаю ту же ошибку в конструкторе XAML.

Graeme_Grant

Да, это не "автоматическое" поведение по умолчанию, вы хотите "вручную" сделать это, поэтому я использовал его в поиске.

Во-первых, как следует из названия, он будет выполнять всю тяжелую работу за вас, заставляя проверять все элементы управления в визуальном графике, а не только один. Второй делает только одно.