2

Это, вероятно, получил простой ответ на это, но у меня возникают проблемы, просто форматирование даты для поля DataForm ..Дата форматирования с помощью аннотаций данных для DataForm в Silverlight

 <df:DataForm x:Name="Form1" ItemsSource="{Binding Mode=OneWay}" AutoGenerateFields="True" 
       AutoEdit="True" AutoCommit="False" 
       CommitButtonContent="Save" 
       CancelButtonContent="Cancel"    
       CommandButtonsVisibility="Commit" 
       LabelPosition="Top" ScrollViewer.VerticalScrollBarVisibility="Disabled" 
       EditEnded="NoteForm_EditEnded"> 
     <df:DataForm.EditTemplate> 
      <DataTemplate>      
       <StackPanel> 
        <df:DataField> 
         <TextBox Text="{Binding Title, Mode=TwoWay}"/> 
        </df:DataField> 

        <df:DataField> 
         <TextBox Text="{Binding Description, Mode=TwoWay}" AcceptsReturn="True" HorizontalScrollBarVisibility="Auto" 
           VerticalScrollBarVisibility="Auto" Height="" TextWrapping="Wrap" SizeChanged="TextBox_SizeChanged"/>       
        </df:DataField> 

        <df:DataField> 
         <TextBlock Text="{Binding Username}"/> 
        </df:DataField> 

        <df:DataField> 
         <TextBlock Text="{Binding DateCreated}"/> 
        </df:DataField> 
       </StackPanel> 
      </DataTemplate> 
     </df:DataForm.EditTemplate> 
    </df:DataForm> 

Я обязан это класс примечание, которое имеет аннотацию для поля DateCreated:

/// <summary> 
    /// Gets or sets the date created of the noteannotation 
    /// </summary> 
    [Display(Name="Date Created")] 
    [Editable(false)] 
    [DisplayFormat(DataFormatString = "{0:u}", ApplyFormatInEditMode = true)] 
    public DateTime DateCreated { get; set; } 

что бы я установил dataformatstring он возвращается как: например, 4/6/2010 10:02:15 AM

Я хочу, чтобы этот formatt ed as yyyy-MM-dd HH: mm: ss

Я пробовал пользовательский формат выше {0: yyyy-MM-dd hh: mm: ss}, но он остается тем же. То же самое происходит и для {0: u} или {0: s}.

ответ

4

Эта задача была решена путем добавления преобразователя к связывания данных:

<df:DataField> 
    <TextBlock Text="{Binding DateCreated, Converter={StaticResource DateConverter}}"/> 
</df:DataField> 

DateConverter это просто класс, чем реализует интерфейс IValueConverter. Пример ниже показывает формат даты, который мне нужен.

/// <summary> 
/// Date time formatter - for short dates for data bound items 
/// </summary> 
public class DateConverter : IValueConverter 
{ 
    #region Public Methods 

    #region IValueConvertor Members 

    /// <summary> 
    /// Convert data item to a short date 
    /// </summary> 
    /// <param name="value">Value</param> 
    /// <param name="targetType">Target type</param> 
    /// <param name="parameter">Paramter</param> 
    /// <param name="culture">Culture</param> 
    /// <returns>Converted object</returns> 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var date = (DateTime)value; 
     return (date.ToString("dd/MM/yyyy HH:mm:ss")); 
    } 

    /// <summary> 
    /// Convert back data item to a short date 
    /// </summary> 
    /// <param name="value">Value</param> 
    /// <param name="targetType">Target type</param> 
    /// <param name="parameter">Paramter</param> 
    /// <param name="culture">Culture</param> 
    /// <returns>Converted object</returns> 
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var s = (string)value; 
     return (DateTime.Parse(s)); 
    } 

    #endregion IValueConvertor Members 

    #endregion Public Methods 
} 

Это работает как средство - может быть улучшено с некоторой нулевой проверкой! :)