Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Лапшекодим валидацию, или запрещаем вводить неправильные данные?

05.06.22 18:06
Re: Лапшекодим валидацию, или запрещаем вводить неправильные данные?
 
alex445 коренной житель
в ответ AlexNek 05.06.22 17:19, Последний раз изменено 05.06.22 18:21 (alex445)
А интеллисенсе куда завернем?

А сколько всего нужно дописать чтобы добавить новое правило?

Куда заворачивать, какое правило? Вы чего?


MyField

MyFieldMin

MyFieldMax


NumericUpDown

Value={Binding MyField}

Min={Binding MyFieldMin}

Max={Binding MyFieldMax}


Всё. Не надо никаких сообщений об ошибке, не надо подсветок, не надо валидирующих правил, не надо конвертеров, не надо реализаций дополнительных интерфейсов, не надо тормозов с выполнением портянки с рефлексией НЕСКОЛКЬО РАЗ на каждое срабатывания привязки. Ведь если привязка прошла валидацию, значит для всех свойств всех атрибутов каждого свойства выполнилась эта портянка. И это происходит на каждое срабатывание байндинга, повторюсь. Вы курсор в поле ткнули, символ ввели, а у вас уже куча событий произошла. И часто байндинг по 2-3 раза лишь за эти короткие действия срабатывает. Дарю Мурру идею - меняем ваш подход на мой и пишем в заслугах - ускорил прогу в 30 раз.


Всё это отобразится интеллисенсе из коробки.


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


Но если прямо хочется дать инфу юзеру, в каких диапазонах вводить, то лучше это делать не после ввода во всплывающем тултипе (самый дурацкий, тормозной и раздражающий способ), а сразу дать понять перед вводом, в каких диапазонах будет валидное значение. Я иногда делаю такой лейбл перед полем ввода:


DisplayName = $"{MyFieldName} ({MyFieldMin} - {MyFieldMax}):"


TextBlock Text={Binding DisplayName}


Т.е. лейбл будет выглядеть примерно так:


Параметр (0-100):


Тут я сразу вижу, что и сколько могу ввести, а не пишу наугад, жду тормозной тултип и вчитываюсь в мелкий серый текст на белом фоне (дефолтный стиль для тултипов), который ещё и через 5 секунд исчезает автоматически.

 

Перейти на