2013-07-29 2 views
0

У меня есть следующие DatePicker:событие изменения значения WPF работает до того изменилось значение

<xctk:DateTimePicker HorizontalAlignment="Right" Margin="0,23,671,0" Name="datepicker" VerticalAlignment="Top" Width="120" Height="49" BorderBrush="Black" Cursor="Hand" ValueChanged="dateTimePicker1_ValueChanged" />

Теперь, как вы можете видеть компонент имеет событие ValueChanged. Код события выглядит следующим образом:

private void dateTimePicker1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
{ 

    DateTime date = (DateTime)datepicker.Value; 
    datepicker.Text = date.Date.ToString(); 
    UpdateDateLabels(date); 
} 

private void UpdateDateLabels(DateTime date) 
{ 
    dstart.Content = date.Date.ToShortDateString(); 

    switch (datebox.SelectedIndex) 
    { 
     case 0: 
      date.AddDays(1); 
      break; 
     case 1: 
      date = date.AddDays(7); 
      break; 
     case 2: 
      date = date.AddMonths(1); 
      break; 
     case 3: 
      date = date.AddYears(1); 
      break; 
     default: 
      break; 
    } 
    MessageBox.Show(datebox.SelectedValue.ToString()); 
    dend.Content = date.Date.ToShortDateString(); 

} 

Теперь, как некоторые из вас могут знать DatePicker выглядит следующим образом:

Datepicker

Теперь, когда я нажимаю клавиши со стрелками (вверх и вниз) все работает как это должно. Но если я, однако нажмите на кнопку, чтобы просмотреть календарь, то changedevent уже уволен без фактического изменения (я даже не получить, чтобы увидеть календарь, прежде чем я получаю следующее сообщение об ошибке):

Error

Может кто-нибудь скажи мне, почему это происходит?

ответ

1

Вы должны проверить OriginalSource.

Попробуйте это:

private void dateTimePicker1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
{ 
    if (e.OriginalSource is Xceed.Wpf.Toolkit.DateTimePicker) 
    { 
     DateTime date = (DateTime)datepicker.Value; 
     datepicker.Text = date.Date.ToString(); 
     UpdateDateLabels(date); 
    } 
} 
0

Я пойду за «научить человека ловить рыбу» ответ.

Лучший способ ответить на вопрос «почему это происходит?». часто возникает вопрос о вашем стеке вызовов. Если он показывает строку, говорящую [], вы [b] НУЖНО [/ b], чтобы отключить Just My Code в параметрах отладки (Options-> Debugging-> Uncheck «Включить только мой код».

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

Что я собираюсь угадать, вы увидите, что есть куча вызовов Binding, возможно, для нового редактора, который отображается, когда вы нажмите эту кнопку. Часто будет изменено событие с измененными значениями, когда привязка будет установлена, даже если значение не изменилось.

Итак, согласно ответу @ kmatyaszek, вы должны быть уверены, что работаете только с событием когда вам нужно.

Смежные вопросы