Лапшекодим валидацию, или запрещаем вводить неправильные данные?
А интеллисенсе куда завернем?
А сколько всего нужно дописать чтобы добавить новое правило?
Куда заворачивать, какое правило? Вы чего?
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 секунд исчезает автоматически.