Re[2]: Binding в WPF
От: Аноним  
Дата: 21.07.09 03:45
Оценка:
Здравствуйте, notacat, Вы писали:

А>>Суть проблемы: пишется составной контрол — Slider + TextBox, оба элемента привязаны к двухсторонней привязкой к DependencyProperty "Value" этого контрола. Т.е. дергаем слайдер — меняется текст, вводим текст — перемещается слайдер. Соответственно к Value извне также привязывается свойство объекта, над которым мы все эти действия и производим. Внутри самого контрола значение корректируется через CoerceValueCallBack (выход за границы, количество знаков после запятой и т.д.), но вот наружу по биндингу прилетает значение не скорректированное. Получается что биндинг происходит раньше установки самого свойства и, соответственно, до вызова CoerceValueCallback! Как с этим бороться?


N>Поищите в msdn "Dependency Property Value Precedence", почитайте, может понятнее будет.


N>А практически, когда в PropertyChangedCallback прилетает новое значение, там можно проверить, если значение свойства не скорректированное, то явно вызвать CoerceValue для этого свойства. Как-то так:


N>
N>if (!DependencyPropertyHelper.GetValueSource(this, e.Property).IsCoerced)
N>{
N>    CoerceValue(e.Property);
N>    // return; 
N>}
N>


MSDN я читал, решения и даже намека на причины такой проблемы там нет. Скорее всего это не проблема DependencyProperty, а проблема биндинга. Получается, что биндинг либо происходит в обход промежуточных свойств (т.е. сразу от конечного источника к конечной цели), либо передает базовое значение. В самом источнике проверять значения очень не хотелось бы, тем более таким изощренным способом, тем более что он является оберткой над нативным кодом и наследоваться от DependencyObject возможности нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.