2013-08-14 1 views
1

В моем приложении Wpf у меня есть два TimePickers. Я использовал привязку для них, но их время не обновляется. Я также хочу установить выбранную дату для этих TimePickers. Я попытался связать ее, как показано ниже. Но это не сработает. Фактическая проблема здесь - это TimePickers внутри DataTemplate.WPF-TimePicker Связывание для установки даты и времени во время выполнения

Вот XAML:

<DataTemplate x:Key="EditableDataTemplate"> 
    <StackPanel Orientation="Horizontal" Width="596"> 
    <xctk:TimePicker Name="StartPicker" Value="{Binding StartValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Format="Custom" FormatString="hh:mm tt" Background="Yellow" Padding="0" Margin="0" BorderThickness="0" Width="100" EndTime="11:59:0"/> 
    <xctk:TimePicker Name="EndPicker" Value="{Binding EndValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Format="Custom" FormatString="hh:mm tt" Background="Yellow" Padding="0" Margin="0" BorderThickness="0" Width="60" EndTime="11:59:0"/> 
    </StackPanel> 
</DataTemplate> 

Связывание с properits в C#:

private DateTime _dateTime1; 
    public DateTime StartValue 
    { 
     get 
     { 
      return _dateTime1; 
     } 
     set 
     { 
      _dateTime1 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second); 
      OnPropertyChanged("StartValue"); 
     } 
    } 

    private DateTime _dateTime2; 
    public DateTime EndValue 
    { 
     get 
     { 
      return _dateTime2; 
     } 
     set 
     { 
      _dateTime2 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second); 
      OnPropertyChanged("EndValue"); 
     } 
    } 

    protected virtual void OnPropertyChanged(String time) 
    { 
     if (System.String.IsNullOrEmpty(time)) 
     { 
      return; 
     } 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(time)); 
     } 
    } 

    #region INotifyPropertyChanged Members 
    public event PropertyChangedEventHandler PropertyChanged; 
    #endregion 

Пожалуйста, предложить некоторые идеи?

+0

, в классе которого объявлены свойства. Вы используете ViewModel? Где вы используете свой EditableDataTemplate? Просьба добавить информацию на ваш вопрос – Jehof

+0

Получают ли какие-либо ошибки привязки в окне вывода при отладке? – Dutts

+0

@Jehof Да. Эти свойства объявлены внутри моего ViewModel. В моем xaml у меня есть два DataTemplates. Из них «EditableDataTemplate» - один. – user2622971

ответ

0

Вы пытаетесь установить свои значения в своих установщиках свойств, которые никогда не будут вызваны, поэтому значение свойства никогда не будет установлено (и поэтому никогда не будет уведомлено, а TimePicker никогда не будет обновляться).

Почему бы не попробовать установить свойства в конструкторе ViewModel. Я не уверен, что называется ваш ViewModel, но здесь идет:

public class MyViewModel : INotifyPropertyChanged 
{ 

public MyViewModel() 
{ 
    StartValue = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second); 
    EndValue = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second); 
} 

private DateTime _dateTime1; 
public DateTime StartValue 
{ 
    get 
    { 
     return _dateTime1; 
    } 
    set 
    { 
     if (_dateTime1.Equals(value)) return; 
     _dateTime1 = value; 
     OnPropertyChanged("StartValue"); 
    } 
} 

private DateTime _dateTime2; 
public DateTime EndValue 
{ 
    get 
    { 
     return _dateTime2; 
    } 
    set 
    { 
     if (_dateTime2.Equals(value)) return; 
     _dateTime2 = value; 
     OnPropertyChanged("EndValue"); 
    } 
} 

protected virtual void OnPropertyChanged(String time) 
{ 
    if (System.String.IsNullOrEmpty(time)) 
    { 
     return; 
    } 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(time)); 
    } 
} 

#region INotifyPropertyChanged Members 
public event PropertyChangedEventHandler PropertyChanged; 
#endregion 
} 

Это обеспечит события PropertyChanged обжигают для обоих свойств и до тех пор, как ваше связывание правильно вы будете видеть обновления значений.

+0

Нужно ли писать RelativeSource в xaml TimePicker? – user2622971

+0

Не работает ли переплет? – Dutts

+0

Да. Переплет не работает. – user2622971

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

  • Нет связанных вопросов^_^