【问题标题】:C# WPF DataGrid ConvertersC# WPF DataGrid 转换器
【发布时间】:2013-03-29 03:13:39
【问题描述】:

我这几天一直在尝试格式化数据网格中的字段。我怎样才能简单地更改期间是访问的日期字段。在这次尝试中,我不断收到错误:

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

但是,我使用的所有示例都显示 DateConverter : IValueConverter

我几乎只想更改列以根据日期列出我想要的任何内容。但无法让任何 1 个示例/方法起作用。

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

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    Converter={local:DateConverter}}

    错了。改用这个:

    Converter={StaticResource dateConverter}}

    注意小写的“d”。资源名称区分大小写。

    【讨论】:

    • 非常感谢。我一直在查看的示例具有与 相关的相同资本问题,因为我认为它引用了我展示的第一部分。非常感谢,2 天的失败已经试图让它发挥作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 2017-11-17
    • 2015-08-21
    • 2016-10-11
    相关资源
    最近更新 更多