简化问题:
我在WPF中有一个日期选择器。我在datepicker的文本框中输入值30/10/1983。我需要将值发回到我的viewmodel,在哪里我将它绑定到DateTime?属性。
我有什么办法可以做到这一点。 mm / dd / yyyy格式触发回发但不是dd / mm / yyyy。
DatePicker代码如下所示。
<DatePicker Grid.Row="2" Name="inputDate"
Text="{Binding BirthDate,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
>
</DatePicker>
视图模型属性如下所示。
private DateTime? birthDate;
public DateTime? BirthDate
{
get
{
return this.birthDate;
}
set
{
this.birthDate = value;
OnPropertyChanged("BirthDate");
}
}
我在datepicker文本框中输入值10/10,使用值调用setter,但是当我输入整个日期30/10/1983时,我仍然具有等于NULL的视图模型属性。
我已在日历设置中将格式更改为英语 - 联合王国,而我的CurrentCulture恰当地反映了en-GB。
原始问题:
我在WPF中有一个datetimepicker控件,我已将text属性绑定到视图模型中的Nullable DateTime。
我面临的问题是当我以MM / dd / yyyy格式输入一个值时,我会在视图模型中获得一个值回发值,表示新值。
但是当我以dd / MM / yyyy格式输入值时,我在视图模型中没有收到通知,并且值丢失了。视图模型中的绑定属性为null。
短日期格式是我在日历设置&amp;中指定的格式。 dateFormat,对于短日期格式,我将条目提供为“dd / MM / yyyy”。
有人可以帮我解决这个问题,我在dd / MM / yyyy格式中接受日期,我不想硬编码,我希望从日历设置中选择短日期格式,我也希望也可以在视图模型中接收更新的值。
答案 0 :(得分:1)
问题是,无效日期不会使用ViewModel DateTime属性设置正确的值。因此,您可以拦截它并使用转换器正确转换。
一个例子:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string strValue = System.Convert.ToString(value);
DateTime resultDateTime;
if (DateTime.TryParse(strValue, out resultDateTime))
{
return resultDateTime;
}
return value;
}
您的XAML代码将如下:
<DatePicker
Text="{Binding BirthDate,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
SelectedDate="{Binding RelativeSource={RelativeSource Self},Path=Text,
Converter={StaticResource DateConverter}}"
/>