Как я могу проверить проверки в виде нажатия кнопки? - PullRequest
0 голосов
/ 09 ноября 2018

Мы делаем проект в университете с некоторыми из моих одноклассников. Мы должны сделать настольное приложение, и у нас есть некоторые проблемы с ним. Это было в основном очень трудно понять 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, поэтому мы ждем ответов для такого рода проверки.

1 Ответ

0 голосов
/ 09 ноября 2018

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

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

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

...