2013-03-29 21 views
7

Próbuję sformatować pola w datagrid na kilka dni. Jak mogę po prostu zmienić Okres jest polem daty z dostępu. Podczas tej próby nadal pojawia się błąd:C# Konwertery WPF DataGrid

Wartość "{local: DateConverter}" nie jest prawidłowym wyrażeniem MarkupExtension. Nie można rozwiązać "DateConverter" w przestrzeni nazw "clr-namespace: Yabba". "DateConverter" musi być podklasą MarkupExtension.

Jednak przykłady, z których pracowałem ze wszystkich pokazów DateConverter: IValueConverter.

Po prostu chcę tylko zmienić kolumnę, aby wyświetlić listę, co chcę na podstawie daty. Ale nie można uzyskać żadnego 1 przykładu/metody do pracy.

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> 

kod

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

Co robię źle tutaj?

Dodane zauważa każdemu stosując to jako przykład: (niepowiązany na pytanie, widok wybrana odpowiedź na odpowiedź)

Być może trzeba zmienić typy zależności.

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

musiałem zmienić kopalni

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

Następnie przekształcenie do DateTime

DateTime date = DateTime.Parse((string)value); 

Odpowiedz

5

Converter={local:DateConverter}}

jest źle. Użyj tego zamiast:

Converter={StaticResource dateConverter}}

zwrócić uwagę na małe litery "d". W nazwach zasobów rozróżniana jest wielkość liter.

+0

Dziękuję bardzo. Przykłady, na które patrzyłem, miały ten sam problem kapitałowy, który dotyczyłem * * wierząc, że odwoływał się do pierwszej części, tak jak pokazano. Dziękuję bardzo, 2 dni porażki już próbują to zrobić. – Matty