Re[2]: Binding в WPF
От: notacat  
Дата: 21.07.09 17:07
Оценка:
А>Что это, баг или фича?
На этот вопрос ответа не знаю. Скорей всего фича, если бы был баг, то его бы уже исправили.

A>И что теперь с этим делать?

Я советую в класс MySlider для ValueProperty добавить PropertyChangedCallBack и посмотреть, что там происходит. По идее, то, что я писала первый раз — в этом методе явно вызывать CoerceValue, должно сработать. Если этого почему-либо не хочется делать, то хотя бы в отладчике поизучаете, какое значение прилетает и откуда. DependencyPropertyHelper.GetValueSource(this, e.Property) вернет ValueSource, из которого это можно будет понять.


        public static DependencyProperty ValueProperty =
            DependencyProperty.Register("Value",
                                        typeof (decimal),
                                        typeof (MySlider),
                                        new FrameworkPropertyMetadata((decimal) 0, 
                                        new PropertyChangedCallback(OnValueChanged),CoerceValueCallback));

        private static object CoerceValueCallback(DependencyObject d, object basevalue)
        {
            return Math.Round((decimal) basevalue, 2);
        }
    private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
            MySlider slider = d as MySlider;
            ValueSource source = DependencyPropertyHelper.GetValueSource(slider, e.Property);
            // вот тут можно поизучать source 
            if (!source.IsCoerced)
            {
                 slider.CoerceValue(e.Property);
            }
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.