У меня есть два элемента управления WPF DatePicker и набор инструментов WPF extenstion DateTimeUpDown. DatePicker имеет двустороннюю привязку к свойству DateTime в ViewModel, а DateTimeUpDown имеет привязку к элементу DatePicker через элемент.Управление привязкой к другому элементу управления через ElementName, но начальное значение не отображается
Связывание прекрасно подходит для прокрутки DateTimeUpDown, это изменяет элемент управления DatePicker. Однако, когда установлено исходное значение свойства в ViewModel, значение DateTimeUpDown не задано.
Это более или менее, как это выглядит: В Resources.xaml
<StackPanel Name="StartDate" Visibility="Collapsed">
<TextBlock Text="Start Date" Margin="0, 0, 0, 2" />
<DatePicker Name="StartDatePicker" SelectedDate="{Binding FromDateTime, Mode=TwoWay, ValidatesOnDataErrors=True}" IsTodayHighlighted="False" Uid="ReportingStartDay" />
</StackPanel>
<StackPanel Name="StartTime" Visibility="Collapsed">
<TextBlock Text="Start Time" Margin="0, 0, 10, 2" />
<xctk:DateTimeUpDown Value="{Binding ElementName=StartDatePicker, Path=SelectedDate, Mode=TwoWay}" Background="White" Format="ShortTime" Height="26" Margin="0,1,5,0" TextAlignment="Left"></xctk:DateTimeUpDown>
</StackPanel>
В
private DateTime fromDateTime;
public DateTime FromDateTime {
get { return fromDateTime; }
set {
fromDateTime = value;
OnPropertyChanged("FromDateTime");
}
}
Когда FromDateTime, установлен DatePicker установлен правильно, однако значения ViewModel DateTimeUpDown не задано.
Теперь я попытался добавить трассировку для связывания, который, к сожалению, не помогает мне много:
System.Windows.Data Warning: 56 : Created BindingExpression (hash=36462666) for Binding (hash=21177529)
System.Windows.Data Warning: 58 : Path: 'SelectedDate'
System.Windows.Data Warning: 62 : BindingExpression (hash=36462666): Attach to Xceed.Wpf.Toolkit.DateTimeUpDown.Value (hash=6941388)
System.Windows.Data Warning: 67 : BindingExpression (hash=36462666): Resolving source
System.Windows.Data Warning: 70 : BindingExpression (hash=36462666): Found data context element: <null> (OK)
System.Windows.Data Warning: 74 : Lookup name EndDatePicker: queried DateTimeUpDown (hash=6941388)
System.Windows.Data Warning: 78 : BindingExpression (hash=36462666): Activate with root item DatePicker (hash=55504765)
System.Windows.Data Warning: 108 : BindingExpression (hash=36462666): At level 0 - for DatePicker.SelectedDate found accessor DependencyProperty(SelectedDate)
System.Windows.Data Warning: 104 : BindingExpression (hash=36462666): Replace item at level 0 with DatePicker (hash=55504765), using accessor DependencyProperty(SelectedDate)
System.Windows.Data Warning: 101 : BindingExpression (hash=36462666): GetValue at level 0 from DatePicker (hash=55504765) using DependencyProperty(SelectedDate): DateTime (hash=-1518077112)
System.Windows.Data Warning: 80 : BindingExpression (hash=36462666): TransferValue - got raw value DateTime (hash=-1518077112)
System.Windows.Data Warning: 89 : BindingExpression (hash=36462666): TransferValue - using final value DateTime (hash=-1518077112)
UPDATE
Я нашел проблему. По-видимому, моя проблема была связана с привязкой к специализированному классу, где свойство было определено в родительском классе. Когда «переопределяет» реализацию свойства в унаследованном классе, он работает. Это не имеет смысла, но это работает.
Любая причина, чтобы не связывать UPDOWN свойству FromDateTime, а? –
Я пробовал это, но затем DatePicker не обновляется, когда UpDown обертывается к другой дате (проходящей полночь) –
Это звучит как другая проблема (которая может/должна быть решена). –