我有2个控件:
I have 2 controls:
DatePicker:仅限日期 带TimeMask的文本框:仅适用于
DatePicker: For Date Only TextBox with TimeMask: For Time Only
它们都链接到相同的属性 DateTime EffectiveDate 但是问题是当我更改DatePicker上的Date时,它将TimeTextBox中的Time改为12:00。
They are both linked to the same property DateTime EffectiveDate But the problem is when I change the Date on the DatePicker, it changes the Time in the TimeTextBox back to 12:00.
我了解原因,但是最好的解决方案是让这些工作分开但是绑定到同一个财产?
I understand the reason for it, but what best solution is out there to let these work separately but bound to the same property?
我已经尝试使用当前时间并在set属性中构建一个新的Date,但总是会出现溢出错误。
I have tried to take the current time and build a new Date in the set property but always end up with overflow errors.
推荐答案您可以使用值转换器来保持值
You can use a value converter to hold on to the value
public class DateConverter : IValueConverter { private DateTime timePickerDate; public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { timePickerDate = ((DateTime)(value)); return value; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) return timePickerDate; var datePickerDate = ((DateTime)(value)); // compare relevant parts manually if (datePickerDate.Hour != timePickerDate.Hour || datePickerDate.Minute != timePickerDate.Minute || datePickerDate.Second != timePickerDate.Second) { // correct the date picker value var result = new DateTime(datePickerDate.Year, datePickerDate.Month, datePickerDate.Day, timePickerDate.Hour, timePickerDate.Minute, timePickerDate.Second); // return, because this event handler will be executed a second time return result; } return datePickerDate; } }并将有问题的两个控件绑定到一个属性,但日期选择器使用转换器不覆盖时间。
And have the two controls in question bind to the one property but have the date picker use the converter to not override the time.
<Grid Margin="10,5" > <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition Width="auto"/> </Grid.ColumnDefinitions> <sdk:DatePicker Grid.Column="0" TabIndex="1" Padding="0" SelectedDate="{Binding EffectiveDate, Mode=TwoWay, Converter={StaticResource DateConverter}}" SelectedDateFormat="Short"/> <toolkit:TimePicker Grid.Column="1" Value="{Binding EffectiveDate, Mode=TwoWay}" Margin="0" Padding="0" HorizontalAlignment="Left" TabIndex="2" /> </Grid>更多推荐
仅绑定日期和时间
发布评论