Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF DataGrid中格式化可为空的DataTime_C#_Wpf_Xaml_Converter_Ivalueconverter - Fatal编程技术网

C# 在WPF DataGrid中格式化可为空的DataTime

C# 在WPF DataGrid中格式化可为空的DataTime,c#,wpf,xaml,converter,ivalueconverter,C#,Wpf,Xaml,Converter,Ivalueconverter,在WPF应用程序中,我在datagrid中显示数据。 在这个数据网格中有一些日期时间值 如果未设置DateTime,则显示01/01/0001,这是正常的,因为DateTime不可为空 在这种情况下,我想显示“-” 我想我需要用一个转换器 我试过这个: xmlns:converter="clr-namespace:myNameSpace" <DataGrid Grid.Column="0" Grid.Row="2"> <DataGrid.Columns>

在WPF应用程序中,我在datagrid中显示数据。 在这个数据网格中有一些日期时间值

如果未设置DateTime,则显示01/01/0001,这是正常的,因为DateTime不可为空

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

我想我需要用一个转换器

我试过这个:

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>
使用制度; 使用System.Collections.Generic; 使用System.Linq; 使用系统文本; 使用System.Threading.Tasks; 利用制度全球化; 使用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>
在之后打开:

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>

任何人都可以帮助我吗?

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

<Window.Resources>
    <converter:DateConverter x:Key="DateConverter" />
</Window.Resources>
有关更多信息,请参阅。


    <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>

谢谢:)代码可以编译!但是,我有一个XamlParseException,InnerException:找不到名为“DateConverter”@WalterFabioSimoni的ressource:尝试将资源放在窗口或用户控件的资源集合中,而不是数据网格中。是的!没关系:)非常感谢:)