C# WPF 数据表格转换器

14

我已经努力尝试了好几天来格式化数据表格中的字段。如何简单地更改Access中日期字段“Period”的格式?在这次尝试中,我一直收到以下错误:

“{local:DateConverter}”值不是有效的MarkupExtension表达式。无法解析名称空间“clr-namespace:Yabba”中的“DateConverter”。 “DateConverter”必须是MarkupExtension的子类。

但是,我参考的所有示例都显示DateConverter:IValueConverter

我实际上只是想根据日期更改列,使其列出我想要的任何内容。但是我无法让任何一个方法或示例起作用。

XAML

<Window Name="MainForm" x:Class="Yabba.MainWindow"
    xmlns:local="clr-namespace:Yabba"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="655.217" Width="887.851" Loaded="Window_Loaded">
<Window.Resources>
    <local:DateConverter x:Key="dateConverter"/>
</Window.Resources>
<Grid>
    <DataGrid Name="dataGrid1"  AutoGenerateColumns="False" PreviewKeyDown="dataGrid1_KeyDown" CanUserAddRows="false" SelectionUnit="FullRow" IsReadOnly="True" SelectionMode="Single" HorizontalAlignment="Left" VerticalAlignment="Top" Height="348" Width="753" SelectionChanged="dataGrid1_SelectionChanged" Margin="0,20,0,0" MouseDoubleClick="dataGrid1_MouseDoubleClick">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Question" Binding="{Binding title}"></DataGridTextColumn>
            <DataGridTextColumn Header="Period" Binding="{Binding started, Converter={local:DateConverter}}"></DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

代码

namespace Yabba {
/// <summary>
[ValueConversion(typeof(DateTime), typeof(String))]
public class DateConverter : IValueConverter {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        DateTime date = (DateTime)value;
        return date.ToShortDateString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        string strValue = value as string;
        DateTime resultDateTime;
        if (DateTime.TryParse(strValue, out resultDateTime)) {
            return resultDateTime;
        }
        return DependencyProperty.UnsetValue;
    }
}

我在这里做错了什么?

针对使用此示例的任何人添加说明:(与问题无关,请查看所选答案以获取答案)

您可能需要根据情况更改类型。

[ValueConversion(typeof(DateTime), typeof(String))]

我不得不更改我的

[ValueConversion(typeof(String), typeof(String))]

然后将其转换为 DateTime

DateTime date = DateTime.Parse((string)value);
1个回答

12

Converter={local:DateConverter}}

有误,请使用以下代码:

Converter={StaticResource dateConverter}}

注意小写字母 "d",资源名称区分大小写。


非常感谢。我一直在查看的示例都有相同的大写问题,我认为是因为它引用了第一部分 <local:DateConverter x:Key="dateConverter"/> 。非常感谢,已经尝试了两天了,但一直没有成功。 - Matty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接