奇怪的自动日期格式数据网格

时间:2017-05-23 07:28:33

标签: c# wpf

我为我的Datagrid列获得了这个XAML:

<DataGridTemplateColumn SortMemberPath="LiefDat"  Width="110" x:Name="columnLieferDatum" >
                                <DataGridTemplateColumn.Header >
                                    <Grid>
                                        <TextBlock Text="Lieferdatum"/>
                                    </Grid>
                                </DataGridTemplateColumn.Header>
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <Label Width="110" x:Name="lblLiefDat" Content="{Binding LiefDat, StringFormat=\{0:dd.MM.yy HH:mm:ss\}}"/>
                                        <DataTemplate.Triggers>
                                            <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=DataGridRow}}"
                                                                   Value="True">
                                                <Setter TargetName="lblLiefDat" Property="Foreground" Value="white" />
                                            </DataTrigger>
                                        </DataTemplate.Triggers>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>

我从XML中读取数据,该格式的格式如下:2001-02-16T00:00:00 + 01:00

Datagrid自动将此值转换为:2.16.2001,我如何将其更改为16.2.2001,已经尝试this

修改

借助@Dominic Jonas的小费,我得到了解决方案:

 Content="{Binding LiefDat}" ContentStringFormat="dd.MM.yyyy" 

在XAML中这样添加它是正确的方法

2 个答案:

答案 0 :(得分:1)

你可以这样做。 制作DateTimeConvertor,类似于:

public class DateTimeConvertor : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var dateTime = (DateTime?)value;

        if (dateTime.HasValue)
        {
            return dateTime.Value.ToString("dd.MM.yyyy");
        }
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

将它介绍给Window / UserControlResources:

<Window.Resources>
    <local:DateTimeConvertor x:Key="DateTimeConvertor" />
</Window.Resources>

并像这样使用它:

<Label x:Name="lblLiefDat"
       Content="{Binding LiefDat, Converter={StaticResource DateTimeConvertor}}"
       Margin="204,259,54,0" />

它在我这边工作得很好。我希望它有所帮助。

对于LiefDat(在你的情况下命名的属性)我已经做了这个,只是为了显示目的。

public DateTime LiefDat { get; set; }
public TestVM()
{
    LiefDat = DateTime.Now;
}

答案 1 :(得分:1)

如果您设置

StringFormat=\{0:dd.MM.yy HH:mm:ss\}

然后给出硬编码的字符串格式。尝试使用:

StringFormat=d

然后动态生成格式。这是一个包含示例的小列表: http://www.csharp-examples.net/string-format-datetime/

但这要求您使用全局语言设置(就像您已经做过的那样)。