【问题标题】:Bind string to Date Picker selected date in WPF将字符串绑定到 WPF 中日期选择器选定的日期
【发布时间】:2016-08-16 18:04:54
【问题描述】:

我有一个字符串,我将其转换为类型 (dd/mm/yyyy) 的日期格式为 15/08/2016 11:00:00 AM

我想将它绑定到 Datetime Picker Selected Date,如下所示

var MyDate= "15/08/2016 11:00:00 AM";
DateTimePicker1.SelectedDate = DateTime.ParseExact(MyDate,"dd/mm/yyyy",
CultureInfo.InvariantCulture);

如果我这样做

 DateTimePicker1.SelectedDate = DateTime.Now;

这非常有效。我该怎么做?

【问题讨论】:

  • 这个我已经用过了。这在我的情况下不起作用。
  • 将 ''mm'(分钟)更改为 'MM'(月)。
  • @jdweng 我这样用过DateTime.ParseExact("15/08/2016 11:00:00 AM", "dd/MM/yyyy HH:mm:ss",CultureInfo.InvariantCulture);
  • 你的意思是要改变datePicker的日期格式对吧?

标签: c# wpf datetime


【解决方案1】:

你必须为DatePickerTextBox指定一个样式

在您的窗口中,在<Grid> 开始之前,使用此代码为DatePickerTextBox 定义样式

<Window.Resources>
        <Style TargetType="{x:Type DatePickerTextBox}">
            <Setter Property="Control.Template">
                <Setter.Value>
                    <ControlTemplate>
                        <TextBox x:Name="PART_TextBox"
         Text="{Binding Path=SelectedDate, StringFormat='dd/mm/yyyy', 
         RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}" />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>

在上面的代码中,你应该关注的一行是

Text="{Binding Path=SelectedDate, StringFormat='dd/mm/yyyy'

如果您看到,您可以为出现在此DatePickerTextBox 中的文本定义字符串格式。

现在你应该运行你只使用的代码版本

DateTimePicker1.SelectedDate = DateTime.Now;

这行代码而不是其他三个语句。此代码应按照您在上述代码行中指定的格式格式化字符串。

【讨论】:

    【解决方案2】:

    试试这个:

    DateTime.ParseExact("15/08/2016 11:00:00 AM", "dd/MM/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
    

    我为 AM/PM 格式添加了 tt

    编辑:

    <DatePickerTextBox Text="{Binding Date1, StringFormat='dd/MM/yyyy HH:mm:ss tt'}"></DatePickerTextBox>
    

    【讨论】:

    • 他已经知道如何格式化DateTime的对象了。他想格式化出现在 DatePickerTextBox 中的日期
    • 如果你没有检查,他的所有代码示例都像 (var MyDate="15/08/2016 11:00:00 AM"; DateTimePicker1.SelectedDate = DateTime.ParseExact(MyDate,"dd /mm/yyyy", CultureInfo.InvariantCulture);) 正在崩溃,这是无效的格式,所以我假设这是第一个必须修复的问题。
    • 他用 DateTimePicker1.SelectedDate = DateTime.Now 说,这工作得很好所以我假设他会运行我提供的代码来回答这个代码。因为这样他会得到他在问题中想要的结果。
    • 好吧,我会问他问题到底出在哪里,因为我看到问题肯定是C#代码。
    • 当然。 datePicker 的格式是默认的,要改变它,你必须定义样式而不是格式化底层绑定的 DateTime 对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多