首页 文章

DateTimePicker WPF绑定通过userinput接受dd / MM / yyyy

提问于
浏览
0

Simplified Question:

我在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 .

Original Question:

我在WPF中有一个datetimepicker控件,我已将text属性绑定到视图模型中的Nullable DateTime .

我面临的问题是当我以MM / dd / yyyy格式输入一个值时,我在视图模型中得到一个值回发,表示新值 .

但是当我以dd / MM / yyyy格式输入值时,我没有在视图模型中收到通知,并且值丢失了 . 视图模型中的绑定属性为null .

短日期格式是我在日历设置和日期格式中指定的格式,其中对于短日期格式,我将条目提供为“dd / MM / yyyy” .

有人可以帮助我这个场景我在dd / MM / yyyy格式接受日期,我不想硬编码,我希望从日历设置中选择短日期格式,我也希望收到视图模型中的更新值也是如此 .

1 回答

  • 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}}"
      />
    

相关问题