我有两个控件WPF DatePicker和WPF扩展工具包DateTimeUpDown。 DatePicker具有与ViewModel中的DateTime属性的双向绑定,DateTimeUpDown通过Element绑定到DatePicker。
绑定在滚动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>
在ViewModel中
private DateTime fromDateTime;
public DateTime FromDateTime {
get { return fromDateTime; }
set {
fromDateTime = value;
OnPropertyChanged("FromDateTime");
}
}
设置FromDateTime时,DatePicker设置正确,但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)
更新
我发现了问题。显然我的问题是由于绑定是一个专门的类,其中属性是在父类上定义的。当&#34;覆盖&#34;它继承的类中的属性实现。这没有意义,但它确实有效。
答案 0 :(得分: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
答案 1 :(得分:0)
您应该尝试在第二个绑定中添加UpdateSourceTrigger=PropertyChanged
。
在双向绑定中,它将强制它更新PropertyChanged事件的源。