【问题标题】:Strange Auto-Date Format Datagrid奇怪的自动日期格式数据网格
【发布时间】:2017-10-23 00:40:07
【问题描述】:

我的 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 中这样添加是正确的方法

【问题讨论】:

  • 您是否将应用的​​文化设置为“de-DE”?
  • 我在 InitializeComponent() 之后设置了Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");

标签: c# wpf


【解决方案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;
}

【讨论】:

  • 未经测试,但也确保此解决方案有效,谢谢!
  • 我的意思是我的解决方案,没有冒犯:)
  • 别担心 :) 你得到的反馈越多,你学习方法的选择就越多 :)
【解决方案2】:

如果你设置了

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

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

StringFormat=d

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

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

【讨论】:

    猜你喜欢
    • 2018-11-17
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多