C# 日期时间选择器+;WPF&x2B;绑定&x2B;通过用户输入接受日/月/年
简化问题: 我在WPF有一个日期选择器。我在日期选择器的文本框中输入值30/10/1983。我需要将该值发布回我的viewmodel,我在哪里将其绑定到了DateTime?财产 我有没有办法做到这一点。mm/dd/yyyy格式会触发回发,但不会触发dd/mm/yyyy 日期选择器代码如下所示C# 日期时间选择器+;WPF&x2B;绑定&x2B;通过用户输入接受日/月/年,c#,wpf,datetime,datetimepicker,C#,Wpf,Datetime,Datetimepicker,简化问题: 我在WPF有一个日期选择器。我在日期选择器的文本框中输入值30/10/1983。我需要将该值发布回我的viewmodel,我在哪里将其绑定到了DateTime?财产 我有没有办法做到这一点。mm/dd/yyyy格式会触发回发,但不会触发dd/mm/yyyy 日期选择器代码如下所示 <DatePicker Grid.Row="2" Name="inputDate" Text="{Binding BirthDate,Mode=TwoWay,Updat
<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
在日历设置中,我已将格式更改为English UnitedKingdom,并且我的当前区域性适当地反映了en GB
原始问题:
我在WPF中有一个datetimepicker控件,我已将text属性绑定到视图模型中可为空的DateTime
我面临的问题是,当我以MM/dd/yyyy格式输入一个值时,我确实会在视图模型中得到一个值,指示新值
但是,当我以dd/MM/yyyy格式输入值时,我在视图模型中没有收到通知,并且该值丢失。视图模型中的绑定属性为null
短日期格式是我在“日历设置和日期格式”中指定的格式,对于短日期格式,我在其中提供“dd/MM/yyyy”条目
有人能帮我解决这个问题吗?在这种情况下,我接受dd/MM/yyyy格式的日期,我不想硬编码,我希望从日历设置中选择短日期格式,并且,我也希望在视图模型中接收更新后的值。问题在于,无效日期将不会使用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}}"
/>
发布您的代码或example@TheodosiusVonRichthofen我在这里@sandpku发布了一个简化的问题,不管你的问题现在有多简单,你仍然应该显示你的相关代码。你的格式问题不只是一个文化问题吗?例如,在英国使用的默认日期格式是dd/mm/yyyy,而在欧洲的一些地方,它是mm/dd/yyyy。查看问题的答案以了解如何更改当前的区域性@Sheridan很抱歉DatePicker没有文本参数。@Teysz请尝试查看此处:因此我选中了,并且显然使用了“Windows.UI.Xaml.Controls.DatePicker”而不是“System.Windows.Controls.DatePicker”。我使用的那个没有Text参数。很好,将绑定改为DATE属性,而不是Text属性:我已经完成了你写的,但是我仍然得到了美式的日期MM/dd/yyyy。我似乎无法将其更改为我想要的格式,dd/MM/yyyy。我甚至将我的windows区域设置从en US更改为nl nl。还是不走运:/