C# WPF DataGrid конвертори

От дни се опитвам да форматирам полета в мрежа от данни. Как мога просто да променя полето Период е дата от достъп. При този опит продължавам да получавам грешката:

Стойността на „{local:DateConverter}“ не е валиден израз на MarkupExtension. Не може да се разреши „DateConverter“ в пространство от имена „clr-namespace:Yabba“. „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);

person Matty    schedule 29.03.2013    source източник


Отговори (1)


Converter={local:DateConverter}}

Не е наред. Използвайте това вместо това:

Converter={StaticResource dateConverter}}

Обърнете внимание на малката буква "d". Имената на ресурсите са чувствителни към регистъра.

person Federico Berasategui    schedule 29.03.2013
comment
Много благодаря. Примерите, които разглеждах, имаха същия проблем с капитала, който свързах с ‹local:DateConverter x:Key=dateConverter/›, вярвайки, че препраща към първата част, както ми беше показано. Благодаря ви много, 2 дни неуспех вече се опитвах да накарам това да работи. - person Matty; 29.03.2013