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

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

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

if (!DependencyPropertyHelper.GetValueSource(this, e.Property).IsCoerced)
{
    CoerceValue(e.Property);
    // return; 
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.