WPF ListView GridView GridViewColumn StringFormat CodeBehind .NET 4.0 Visual Studio 2010 - PullRequest
0 голосов
/ 11 октября 2011

Необходимо отформатировать строку в GridView ListView в коде позади.XAML не вариант, так как данные и столбцы создаются в коде.

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: гггг / мм / дд чч: мм тт}}, о которой я могу думать.

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

1 Ответ

0 голосов
/ 11 октября 2011

Пустые скобки {}, которые вы используете в xaml, являются escape-последовательностью, поэтому формат не интерпретируется синтаксическим анализатором как разметка. Вы не нуждаетесь в них в коде позади - попробуйте это:

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