【问题标题】:DateTimePicker + WPF + binding + accept dd/MM/yyyy via userinputDateTimePicker + WPF + 绑定 + 通过用户输入接受 dd/MM/yyyy
【发布时间】:2014-11-07 11:13:32
【问题描述】:

简化问题:

我在 WPF 中有一个日期选择器。我在日期选择器的文本框中输入了一个值 30/10/1983。我需要将值发布回我的视图模型,我在哪里将它绑定到日期时间?属性。

有什么办法可以做到这一点。 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 的视图模型属性。

我已在日历设置中将格式更改为 English-UnitedKingdom,并且我的 CurrentCulture 适当地反映了 en-GB。

原问题:

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

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

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

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

在我接受 dd/MM/yyyy 格式的日期并且我不想硬编码的情况下,有人可以帮我解决这个问题,我希望从日历设置中选择短日期格式,而且,我希望也可以在视图模型中接收更新的值。

【问题讨论】:

  • 发布您的代码或示例
  • @TheodosiusVonRichthofen 我在这里发布了一个简化的问题stackoverflow.com/questions/26843658/…
  • @Sandepku,无论您现在的问题多么简单,您仍然应该显示您的相关代码。
  • 您的格式问题不只是Culture 问题吗?例如,英国使用的默认日期格式是 dd/mm/yyyy,而在欧洲的某些地方,它是 mm/dd/yyyy。查看How can i globally set the Culture in a WPF Application? 问题的答案,了解如何更改当前的Culture
  • @Sheridan 对此感到抱歉

标签: c# wpf datetime datetimepicker


【解决方案1】:

问题与无效日期有关,您的 ViewModel DateTime 属性不会设置正确的值。因此,您可以拦截它并使用 CONVERTER 正确转换。

一个例子:

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

【讨论】:

  • DatePicker 没有 Text 参数。
  • @Teysz 试试看这里:msdn.microsoft.com/en-us/library/…
  • 所以我检查了一下,我显然使用了“Windows.UI.Xaml.Controls.DatePicker”而不是“System.Windows.Controls.DatePicker”。而我使用的那个没有Text参数。
  • 完美,将 Binding 更改为 DATE 属性而不是 TEXT 属性:msdn.microsoft.com/it-it/library/windows/apps/…
  • 我已经完成了你写的,但我仍然得到了 MM/dd/yyyy 的美式日期。我似乎无法将其更改为我想要的格式,dd/MM/yyyy。我什至将我的 Windows 语言环境设置从 en-US 更改为 nl-NL。仍然没有运气:/
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多