在WPF DataGrid中格式化Nullable DateTime

时间:2013-05-02 08:12:12

标签: c# wpf xaml converter ivalueconverter

在WPF应用程序中,我在数据网格中显示数据。 在此数据网格中有一些DateTime值。

如果没有设置DateTime,它会显示01/01/0001,这是正常的,因为DateTime不可为空。

在这种情况下,我想显示“ - ”。

我想我需要使用转换器。

我试过了:

使用System;     使用System.Collections.Generic;     使用System.Linq;     使用System.Text;     使用System.Threading.Tasks;     使用System.Globalization;     使用System.Windows.Data;

namespace Phoenix_CRM
{
    public class Converter
    {
    }

    public class DateConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null)
                return "--/--/----";

            DateTime returnVal;

            if (DateTime.TryParse(value.ToString(), out returnVal))
            {
                if (returnVal != DateTime.MinValue)
                    return returnVal;
                else
                    return "--/--/----";
            }
            else
                return "--/--/----";
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null)
                return DateTime.MinValue;

            DateTime val;
            if (value.ToString() == "--/--/----")
                return DateTime.MinValue;

            if (DateTime.TryParse(value.ToString(), out val))
                return val;
            else
                return DateTime.MinValue;
        }

    }

}

我在我的XAML上添加了这个:

xmlns:converter="clr-namespace:myNameSpace" 

在之后:

<DataGrid Grid.Column="0" Grid.Row="2">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{ Binding Path= dDate,StringFormat={}{0:dd/MM/yyyy HH:mm},Converter={converter:Converter.DateConverter}}" Header="  Date  " Width="Auto" IsReadOnly="True"  />
    </DataGrid.Columns>
</DataGrid>

由于

,我的代码无法编译
Converter={converter:Converter.DateConverter}}

有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

要使用转换器,您必须将其定义为资源并使用该资源:

<Window.Resources>
    <converter:DateConverter x:Key="DateConverter" />
</Window.Resources>

用法:

Converter={StaticResource DateConverter}

有关详细信息,请参阅this tutorial

答案 1 :(得分:0)

    <Window.Resources>
        <converter:DateConverter x:Key="DateConverter" />
    </Window.Resources>

    <DataGrid Grid.Column="0" Grid.Row="2">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path= dDate,StringFormat={}{0:dd/MM/yyyy HH:mm},Converter={StaticResource DateConverter}}" Header="  Date  " Width="Auto" IsReadOnly="True"  />
        </DataGrid.Columns>
    </DataGrid>