C# 日期时间选择器+;WPF&x2B;绑定&x2B;通过用户输入接受日/月/年

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

简化问题:

我在WPF有一个日期选择器。我在日期选择器的文本框中输入值30/10/1983。我需要将该值发布回我的viewmodel,我在哪里将其绑定到了DateTime?财产

我有没有办法做到这一点。mm/dd/yyyy格式会触发回发,但不会触发dd/mm/yyyy

日期选择器代码如下所示

<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。还是不走运:/