Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 74

Валидация (ValidationRules)

13.10.2019, 17:33. Показов 3710. Ответов 9

Студворк — интернет-сервис помощи студентам
Привет всем, возникла проблема с валидацией у меня есть 2 PasswordBox (пароль и повторите пароль) как сделать у них валидацию и как сделать так чтобы если пароли не одинаковые писало пароли разные (или еще что).

Добавлено через 20 минут
Вообще вопрос насколько правильно делать именно валидацию на пароль, а не что-то другое ?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.10.2019, 17:33
Ответы с готовыми решениями:

Валидация
В wpf существует несколько способов валидации модели. Но я ни как не могу выбрать подходящий под мою задачу. Хотя, я думаю, моя задача...

Валидация данных
Подключил валидацию следующим образом: public interface IDataErrorInfo { string Error { get; } ...

Валидация в Silverlight
Здравствуйте. У меня есть дочернее окно Silverlight для создания и редактирования нового сотрудника. При вводе неправильного формата почты...

9
 Аватар для Arthur Progy
251 / 167 / 94
Регистрация: 16.09.2019
Сообщений: 457
13.10.2019, 19:57
Лучший ответ Сообщение было отмечено Ask0n как решение

Решение

вообще валидацию паролей делают так: берут пароль из текстбокса, применяют какую-то хэш-функцию и отправляют в базу. После того, как человек вводит пароль и нажмет кнопку логина, прога берет пароль, опять применяет хэш-функцию и проверяет полученное с базой, если они совпадают, прога дает доступ.
Вот хороший ресурс.
1
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 74
13.10.2019, 23:02  [ТС]
Мне надо при регистрации проверь одинаковые ли пароли или нет, а вообще возможно как-то сделать в WPF валидацию двух полей одновременно (если разные пароли, то оба поля красным подсвечивает)
0
 Аватар для Arthur Progy
251 / 167 / 94
Регистрация: 16.09.2019
Сообщений: 457
13.10.2019, 23:53
да, подключить обработчик текстбокса, чтоб при изменении текста выполнился метод проверки.

Добавлено через 1 минуту
C#
1
2
3
4
private void textBox_TextChanged(object sender, EventArgs e)
{
    //код
}
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 74
14.10.2019, 00:09  [ТС]
Возможно вы меня неправильно поняли
у меня для логина такое
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class LoginValidationRule : ValidationRule
    {
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            if (string.IsNullOrWhiteSpace((value ?? "").ToString()))
            {
                return new ValidationResult(false, "Поле должно быть заполнено");
            }
            else
            {
                if (value.ToString() == "Ask0n") //Тут чек в бд я его стер просто для примера 
                    return ValidationResult.ValidResult;
                else
                    return new ValidationResult(false, "Такой логин уже существует");
            }
        }     
    }
XML
1
2
3
4
5
6
7
8
9
10
<TextBox Name="LoginBox" materialDesign:HintAssist.Hint="Email" Foreground="White" materialDesign:ValidationAssist.Background="Transparent" 
                             materialDesign:ValidationAssist.OnlyShowOnFocus="True" Margin="20 10">
                    <TextBox.Text>
                        <Binding Path="E_mail" UpdateSourceTrigger="PropertyChanged">
                            <Binding.ValidationRules>
                                <domain:CorrectInputLoginValidationRule ValidatesOnTargetUpdated="True"/>
                            </Binding.ValidationRules>
                        </Binding>
                    </TextBox.Text>
                </TextBox>
Есть идеи как такое сделать для двух полей ? чтоб если оба не равны, то выделяет оба красным
0
 Аватар для Arthur Progy
251 / 167 / 94
Регистрация: 16.09.2019
Сообщений: 457
14.10.2019, 00:13
Ask0n, Можно проект, а то так не поймешь что происходит.
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 74
14.10.2019, 01:09  [ТС]
Щас скину тогда, я тут просто эксперементировал
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 74
14.10.2019, 01:13  [ТС]
Там в папке UserControls RegistrationView и в папке Domain все что нужно
Вложения
Тип файла: 7z DPMK.7z (5.03 Мб, 9 просмотров)
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 74
14.10.2019, 14:23  [ТС]
Нашел как решить свою проблему, но возникла еще 1 проблема (на скрине ниже видно её и да я гуглил как это решить, но пока не нашел решение) вот код где надо решить проблему

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class PasswordValidationRule : ValidationRule
    {
        public string Pass1 { get; set; } // \/
        public string Pass2 { get; set; } // Вот я не знаю как тут сделать DependencyProperty 
 
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            if (string.IsNullOrEmpty(pass1.ToString()) || string.IsNullOrEmpty(pass2.ToString()))
                return new ValidationResult(false, "Поля не могут быть пустыми");
            else
            if (pass1 == pass2)
                return ValidationResult.ValidResult;
            else
                return new ValidationResult(false, "Пароли не совпадают");
        }
    }
XML
1
2
3
4
5
6
7
8
9
10
<TextBox Name="EmailBox" materialDesign:HintAssist.Hint="Email" Foreground="White" materialDesign:ValidationAssist.Background="Transparent" 
                             materialDesign:ValidationAssist.OnlyShowOnFocus="True" Margin="20 10">
                    <TextBox.Text>
                        <Binding Path="Password" UpdateSourceTrigger="PropertyChanged">
                            <Binding.ValidationRules>
                                <domain:PasswordValidationRule Pass1="{Binding Password}" Pass2="{Binding Passwordrep}" ValidatesOnTargetUpdated="True"/>
                            </Binding.ValidationRules>
                        </Binding>
                    </TextBox.Text>
                </TextBox>
Миниатюры
Валидация (ValidationRules)  
0
 Аватар для Lasarex
8 / 7 / 1
Регистрация: 01.08.2019
Сообщений: 6
10.07.2020, 16:42
На самом деле эта проблема не имеет простого решения. Во всяком случае я не нашел.
Дело в том, что привязаться Binding'ом можно только к свойству зависимости DependencyProperty, для этого объект должен быть унаследован от класса DependencyObject, а не от ValidationRule. Так что добавить вашему PasswordValidationRule свойство зависимости не представляется возможным.

Но есть обходной путь - использовать Proxy-объект, у которого есть два свойства зависимостей - одно на вход, другое на выход. Или два экземпляра Proxy с одним DependencyProperty каждый соответственно.

Этими свойствами привязываемся к обычному свойству вашего ValidationRule и нужному свойству вашего объекта. Профит!

Реализацию Proxy погуглите в сети например по фразе: "wpf validationrule dependency property" или посмотрите здесь

Добавлено через 23 минуты
А еще лучше
здесь
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.07.2020, 16:42
Помогаю со студенческими работами здесь

Валидация и закрытие окна
Хочу сделать простую вещь - по нажатию кнопки происходит валидация введенных данных (к кнопке привязана комманда с методом валидации), и...

Валидация до потери фокуса
Добрый день. Есть TextBox который привязан к свойству типа int, при попытке ввести текст и потере фокуса возникает ошибка вальвации, как...

Валидация переданного элемента
Всем привет! Столкнулся с необходимостью реализации валидации в датагриде. Почитал про это, везде советуют использовать ValidationRule. Но...

Валидация datagrid mvvm
Здравствуйте! Никак не получается реализовать валидацию полей datagrid. много статей перечитал, прошу помощи. Задача: проверять...

Валидация данных в WPF
Здравствуйте, не могу понять что не так. Есть такой код : &lt;TextBox Grid.Row=&quot;1&quot; Grid.Column=&quot;1&quot; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru