2011-10-10 56 views
0

需要在代碼後面的ListView GridView中格式化字符串。由於數據和列是在代碼中創建的,因此XAML不是一種選擇。所需的日期格式的WPF ListView GridView GridViewColumn StringFormat CodeBehind .NET 4.0 Visual Studio 2010

的XAML版本是:

<TextBlock TextWrapping="NoWrap" Text="{Binding Path=DateTime, Mode=OneWay, StringFormat={}{0:yyyy/MM/dd hh:mm tt}}" /> 

在這種情況下,我不能使用XAML作爲列的數目而變化,需要在該格式變化,顯示的日期的列。我只是不知道如何在後面的代碼中應用該日期格式。以下是構建列的工作代碼。

GridViewColumn gvc; 
    GridViewColumnHeader gvch; 
    Binding gvBinding; 
    DataTemplate template; 
    FrameworkElementFactory textblock; 

    // Data Column 
    gvc = new GridViewColumn(); 
    gvch = new GridViewColumnHeader(); 
    gvch.Content = SF.DispName; 
    gvch.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Stretch; 
    gvch.VerticalContentAlignment = System.Windows.VerticalAlignment.Bottom; 
    gvch.VerticalAlignment = System.Windows.VerticalAlignment.Bottom; 
    gvc.Header = gvch; 
    gvBinding = new Binding(); 
    gvBinding.Mode = BindingMode.OneWay; 
    gvBinding.Path = new PropertyPath("[" + (sDocBaseResultDocsFieldsIndex * 2).ToString() + "]"); 
    template = new DataTemplate(); 
    textblock = new FrameworkElementFactory(typeof(TextBlock)); 
    textblock.SetValue(TextBlock.TextProperty, gvBinding); 
    // textblock.SetValue(TextBlock.TextTrimmingProperty, TextTrimming.WordEllipsis); 
    template.VisualTree = new FrameworkElementFactory(typeof(Grid)); 
    template.VisualTree.AppendChild(textblock); 
    gvc.CellTemplate = template; 
    gvSrchResultsScore.Columns.Add(gvc); 

    sDocBaseResultDocsFieldsIndex++; 

我需要補充的是類似於下面的內容,但無法弄清楚。我已經嘗試了每個我認爲可以考慮的{} {0:yyyy/MM/dd hh:mm tt}}的排列組合。

if (sDocBaseResultDocsFieldsIndex == 12) gvBinding.StringFormat = "Help"; 

回答

0

您在XAML中使用空括號{}是一個轉義序列,因此格式不被解釋爲解析器一個的MarkupExtension。你不需要他們的代碼隱藏 - 試試這個:

gvBinding.StringFormat = "{0:yyyy/MM/dd hh:mm tt}"; 
+0

我認爲這是正確的答案,我的問題是,我餵養它一個字符串,而不是日期。它所做的是在我把它放入字符串之前格式化日期,然後綁定到字符串來解決我的問題。但是我會建立一個測試,爲GridView提供一個日期來測試你的解決方案,這樣我就可以標記它是正確的。 – Paparazzi

相關問題