Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Обновление контрола


Автор: andrey_pro 6.1.2009, 23:06
Вот создал свой контрол, у контрола есть свойство Value типа DateTime
Следующим кодом применяю свой контрол в другой форме

          
Цитата

      <commonui:DateTimeControl EnableTime="True" Grid.Row="1" Grid.Column="1"
                        Style="{StaticResource ValidatedDateTimeControl}">
                    <commonui:DateTimeControl.Value>
                        <Binding Path="ObjectForEdit.AppearanceDate" UpdateSourceTrigger="PropertyChanged">
                            <Binding.ValidationRules>
                                <common:RequiredRule ErrorMessage="Поле не может быть пустым"/>
                            </Binding.ValidationRules>
                        </Binding>
                    </commonui:DateTimeControl.Value>
                </commonui:DateTimeControl>


В контроле можно менять дату (Value), при закрытии формы в котором содержится контрол значение Value остается прежним до изменений.

Вот код контрола

Цитата

        public static readonly DependencyProperty ValueProperty =
                DependencyProperty.Register(
                        "Value",
                        typeof(DateTime),
                        typeof(DateTimeControl),
                        new FrameworkPropertyMetadata(
                                (DateTime)DateTime.MinValue,
                                FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
                                new PropertyChangedCallback(OnValueChanged),
                                new CoerceValueCallback(CoerceValue)));

        public DateTime Value
        {
            get {return (DateTime)GetValue(ValueProperty);}
            set {SetValue(ValueProperty, value);}
        }

        void DatePicker_ValueChanged(object sender, RoutedPropertyChangedEventArgs<DateTime?> e)
        {
            Value = ((DatePicker)sender).Value;
        }

Автор: Partizan 6.1.2009, 23:52
andrey_pro, более подробно опишите производимые действия, желаемый результат и результат, который получатся в итоге

Автор: andrey_pro 7.1.2009, 09:10
У меня в форме стоит мой контрол, который отображает дату.
В коде XAML работаю с этим контролом, передаю и принимаю значение Value. вот так:

Цитата

<commonui:DateTimeControl.Value>
                        <Binding Path="ObjectForEdit.AppearanceDate" UpdateSourceTrigger="PropertyChanged">
                            <Binding.ValidationRules>
                                <common:RequiredRule ErrorMessage="Поле не может быть пустым"/>
                            </Binding.ValidationRules>
                        </Binding>
                    </commonui:DateTimeControl.Value>


При открытии формы значение Value передается и отображается правильно. Потом это значения я меняю в контроле и закрываю форму, значение обратно передается первоначальное!

До этого работал с обычным DatePicker контролом, все нормально было.

В своем контроле я видимо чтото забыл добисать..., в общем не обновлеется значение Value.

Автор: Partizan 7.1.2009, 15:01
andrey_pro, 

а обработчик 

Код

        void DatePicker_ValueChanged(object sender, RoutedPropertyChangedEventArgs<DateTime?> e)
        {
            Value = ((DatePicker)sender).Value;
        }


точно вызывается?

Автор: andrey_pro 7.1.2009, 20:20
точно вызывается.

в следующие мотоды тоже заходит обработчик, и значение Value изменяется,
Цитата

private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            
        }

        private static object CoerceValue(DependencyObject d, object value)
        {
           
        }


но при закрытии формы передается первоначальное значение.
Не пойму в чем дело

Автор: Partizan 7.1.2009, 23:55
andrey_pro, выложите проект...

Автор: andrey_pro 8.1.2009, 10:05
в принципе я весь основной код выложил в первом посте, весь проект выкладывать не буду, он большой.

я думаю что чтото забыл описать в коде XAML, т.к. обратное значение не обновляется, хотя в самом контроле оно точно обновилось.
Цитата

<commonui:DateTimeControl EnableTime="True" Grid.Row="1" Grid.Column="1"
                        Style="{StaticResource ValidatedDateTimeControl}">
                    <commonui:DateTimeControl.Value>
                        <Binding Path="ObjectForEdit.AppearanceDate" UpdateSourceTrigger="PropertyChanged">
                            <Binding.ValidationRules>
                                <common:RequiredRule ErrorMessage="Поле не может быть пустым"/>
                            </Binding.ValidationRules>
                        </Binding>
                    </commonui:DateTimeControl.Value>
                </commonui:DateTimeControl>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)