2013-03-29 31 views
7

我一直在試圖格式字段中的數據網格現在天。我怎樣才能簡單地改變Period是一個來自訪問的日期字段。在這種嘗試中,我不斷收到錯誤:C#WPF數據網格轉換器

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

回答

5

Converter={local:DateConverter}}

是錯誤的。使用這個來代替:

Converter={StaticResource dateConverter}}

,請注意小寫字母 「d」。資源名稱區分大小寫。

+0

非常感謝。我一直在看的例子有與我相關的相同資本問題* *相信它正如我所示的那樣引用第一部分。非常感謝你,2天的失敗已經試圖讓這個工作。 – Matty