2015-01-07 1 views
1

У меня есть два элемента управления 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

Я нашел проблему. По-видимому, моя проблема была связана с привязкой к специализированному классу, где свойство было определено в родительском классе. Когда «переопределяет» реализацию свойства в унаследованном классе, он работает. Это не имеет смысла, но это работает.

+1

Любая причина, чтобы не связывать UPDOWN свойству FromDateTime, а? –

+0

Я пробовал это, но затем DatePicker не обновляется, когда UpDown обертывается к другой дате (проходящей полночь) –

+0

Это звучит как другая проблема (которая может/должна быть решена). –

ответ

0

Вы должны попытаться добавить UpdateSourceTrigger=PropertyChanged во вторую привязку.

В двухстороннем привязке он заставит его обновить источник событий PropertyChanged.

+0

Пробовал, но DateTimeUpDown не обновляется со значением, это всего лишь 00:00 вместо, например, 14:43 –

2

Возможно, вам захочется отладить привязку вашего DateTimeUpDown. Что-то вроде:

<Window … 
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase" 
/> 
<xctk:DateTimeUpDown Value="{Binding ElementName=StartDatePicker, Path=SelectedDate, Mode=TwoWay, diagnostics:PresentationTraceSources.TraceLevel=High}" ...></xctk:DateTimeUpDown> 

Это даст дополнительную информацию в окне вывода, которая может помочь определить, где значение теряется.

Больше информации здесь: Debugging WPF Bindings

+0

Спасибо. Я добавил след к моему оригинальному вопросу, это не очень помогает мне ... –

+0

Theres ссылка на «EndDatePicker» в этой трассе - вы хотите дважды проверить свою привязку? – Scott

+0

Ahhh, извините, это потому, что у меня такая же ситуация и для даты окончания, и я запускал диагностику привязки DateTimeUpDown к EndDatePiker вместо одной привязки к StartDatePicker. Выполнение этого действия на другом элементе управления DateTimeUpDown, который привязывается к StartDatePicker, приводит к тому же, за исключением того, что вместо него используется StartDatePicker. –

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

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