Задача: обновить Validation.HasError (и, соответственно, вывод ошибок валидации) при изменении ValidProperties.
Доп условие: без обхода visual tree и поиска BindingExpression
Здравствуйте, Sinix, Вы писали:
S>И эти люди борются за звание дома высокой культуры быта! (с)
А что не так? ValidationRule имеет вполне конкретное назначение:
The binding engine checks each ValidationRule that is associated with a binding every time it transfers an input value, which is the binding target property value, to the binding source property.
Странно требовать от него догадаться, что какое-то левое свойство тоже влияет на валидацию
Как вариант, можно сделать MultiBinding на оба свойства (Path и ValidProperties) с конвертером, которое выбирает значение одного из них. Так потом можно все свойства забиндить "в паре" с ValidProperties .
Re[2]: [WPF4, Validation] Как бы обновить валидацию?:)
MM>Странно требовать от него догадаться, что какое-то левое свойство тоже влияет на валидацию
Дык он и не должен догадываться, это я должен дать знать, что свойство изменилось. С POCO достаточно OnPropertyChanged, с WPF приходится выделываться.
MM>Как вариант, можно сделать MultiBinding на оба свойства (Path и ValidProperties) с конвертером, которое выбирает значение одного из них. Так потом можно все свойства забиндить "в паре" с ValidProperties.
В теории — прекрасно. На практике свойства ValidProperties может и не быть (прототип пока), просто в один прекрасный момент потребуется обновить валидацию. Можно конечно и тут завести лишнее свойство, но этот вариант будет ничем не лучше, чем вариант с Self.
Re[3]: [WPF4, Validation] Как бы обновить валидацию?:)
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, MxMsk, Вы писали:
MM>>Странно требовать от него догадаться, что какое-то левое свойство тоже влияет на валидацию S>Дык он и не должен догадываться, это я должен дать знать, что свойство изменилось. С POCO достаточно OnPropertyChanged, с WPF приходится выделываться.
Мне кажется, я что-то не так понял Что такое POCO и почему недостаточно OnPropertyChanged в WPF?
MM>>Как вариант, можно сделать MultiBinding на оба свойства (Path и ValidProperties) с конвертером, которое выбирает значение одного из них. Так потом можно все свойства забиндить "в паре" с ValidProperties. S>В теории — прекрасно. На практике свойства ValidProperties может и не быть (прототип пока), просто в один прекрасный момент потребуется обновить валидацию. Можно конечно и тут завести лишнее свойство, но этот вариант будет ничем не лучше, чем вариант с Self.
Да, вариант немногим лучше. Это бесспорно.
Re[4]: [WPF4, Validation] Как бы обновить валидацию?:)
Здравствуйте, Sinix, Вы писали:
S>Plain Old CLR Objects. В WPF FrameworkElement.OnPropertyChanged не вызывает ревалидацию прибинденных контролов, если значение не менялось.
Аааа. Ну да, не вызывает. Кстати, тоже это не нравится. Ведь есть однозначный контракт в виде события PropertyChanged, а так получается, что WPF добавляет свою логику.
Re[4]: [WPF4, Validation] Как бы обновить валидацию?:)
Здравствуйте, MxMsk, Вы писали:
MM>Да, вариант немногим лучше. Это бесспорно.
Пипец #2. Нужен же 2-way biding, откуда в ConvertBack взять значения для ValidParameters?
Если возвращать unset value ValidParameters успешно заменяются дефолтным значением.
Re[5]: [WPF4, Validation] Как бы обновить валидацию?:)
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, MxMsk, Вы писали:
MM>>Да, вариант немногим лучше. Это бесспорно. S>Пипец #2. Нужен же 2-way biding, откуда в ConvertBack взять значения для ValidParameters?
S>Если возвращать unset value ValidParameters успешно заменяются дефолтным значением.
А если попробовать Binding.DoNothing? Вот еще в помощь: тынц.