使用 WPF 的日期转换器

本文关键字:转换器 日期 WPF 使用 | 更新日期: 2023-09-27 18:30:24

public class DateTimeConverter : IValueConverter
{
    #region IValueConverter Members
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (values != null)
        {
            DateTime test = (DateTime) value ;
            string date = test.ToString("d/M/yyyy");
            return (date);
        }
        return string.Empty;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
    #endregion
}

我制作了这个转换器,以便在从日期选择器中选择日期后获取当前时间。在字符串 Date 中,我获取从日期选择器中选择的值,但我似乎不能只获取日期。进入 Value 属性的格式是 9/24/2013 12:00:00,但我希望它是 9/24/2013。我已经在日期时间转换器 WPF 上问过类似的问题,但提供的答案都没有奏效。我收到同样的错误:指定的强制转换无效。

使用 WPF 的日期转换器

您不需要转换器即可执行此操作。可以使用绑定本身中的StringFormat来设置所选日期时间的格式,以仅显示 mm/dd/yyyy 格式的日期。

<TextBlock Text="{Binding Date, StringFormat={}{0:MM/dd/yyyy}}" />

我用这段代码进行了测试,它工作正常。XAML:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding TestList}">
            <DataGrid.Columns>
            <DataGridTemplateColumn Header="Start">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Start, StringFormat=d}" FontFamily="Verdana" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <DatePicker SelectedDate="{Binding Start}" FontFamily="Verdana"  >
                        <DatePicker.CalendarStyle>
                            <Style TargetType="Calendar">
                                <Setter Property="DisplayMode" Value="Month"/>
                            </Style>
                        </DatePicker.CalendarStyle>
                    </DatePicker>
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

型:

    public class TestData
    {
        DateTime start;
        public DateTime Start
        {
            get { return start; }
            set { start = value; }
        }
    }

ViewModel 包含要绑定到 DataGrid 的 TestData 列表:

public List<TestData> TestList { get; set; }

试试这个。

DateTime test = (DateTime) value ;
string date = test.Date.ToString("d/M/yyyy"); 
//Use test.Date.tostring instad of test.tostring(...)
return (date);