Как я могу проверить проверки в представлении по нажатию кнопки?

Мы делаем проект в университет с некоторыми из моих одноклассников. Нам нужно сделать настольное приложение, и у нас есть некоторые проблемы с ним. По сути, было очень сложно понять MVVM, но у меня есть некоторые проблемы с проверкой. Сначала мы хотели использовать интерфейс INotifyDataErrorInfo для проверки, потому что учитель рекомендовал это, но мы этого не поняли.

Итак, мы решили проверку с помощью ValidationRules следующим образом:

public class CantBeNullRule : ValidationRule
{
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        string charString = value as string;
        if (charString.Length == 0)
        {
            return new ValidationResult(false, $"The box can't be empty");
        }
        return new ValidationResult(true, null);
    }
}

И мы связываем эти проверки для текстовых полей в представлении:

<TextBox x:Name="pwdPassword" Grid.Column="2" Grid.Row="4" Grid.ColumnSpan="4" BorderThickness="0,0,0,1" VerticalAlignment="Bottom" BorderBrush="#FF5DC2D5" Foreground="Black" SelectionBrush="#FF5DC2D5" FontFamily="Open Sans SemiBold" FontSize="10">
        <TextBox.Text>
            <Binding Path="Password" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <rule:CantBeNullRule/>
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>

Проблема в том, что эти правила «CantBeNull» не будут выполняться, когда мы открываем представление, сначала нам нужно что-то написать в текстовое поле. Я хотел бы, чтобы проверялась каждая проверка при просмотре, когда я нажимаю кнопку. Если один из валидаторов ложный, то выпишите сообщение об ошибке, иначе выполните команду.

Мы хотим использовать эти ValidationRules, поэтому ждем ответов для такой проверки.


person AME    schedule 09.11.2018    source источник


Ответы (1)


Я думаю, что правило срабатывает только при обновлении привязки, для которой вы установили значение «PropertyChanged».

Лично я бы поставил проверку на ViewModel, а не на представление (хотя это требует использования INotifyDataErrorInfo). Таким образом, конструктор ViewModel может установить значение по умолчанию для пароля (пустое), которое активирует правило проверки.

INotifyDataErrorInfo может показаться слишком трудоемким для простого приложения, но с ним стоит познакомиться. После того, как вы его настроите, он станет очень удобным, а добавление новых правил проверки будет быстрым и простым. Несколько полезных ссылок здесь

person Robin Bennett    schedule 09.11.2018