在Silverlight中使用数据批注对数据表单进行日期格式化
这可能得到了一个简单的答案,但我在格式化数据表单字段的日期时遇到了问题在Silverlight中使用数据批注对数据表单进行日期格式化,silverlight,silverlight-3.0,date-formatting,data-annotations,dataform,Silverlight,Silverlight 3.0,Date Formatting,Data Annotations,Dataform,这可能得到了一个简单的答案,但我在格式化数据表单字段的日期时遇到了问题 <df:DataForm x:Name="Form1" ItemsSource="{Binding Mode=OneWay}" AutoGenerateFields="True" AutoEdit="True" AutoCommit="False" CommitButtonContent="Save" Can
<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>
我已将其绑定到一个Notes类,该类具有字段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; }
//
///获取或设置noteannotation的创建日期
///
[显示(Name=“创建日期”)]
[可编辑(假)]
[DisplayFormat(DataFormatString=“{0:u}”,ApplyFormatInEditMode=true)]
public DateTime DateCreated{get;set;}
无论我如何设置dataformatstring,它都返回为:eg 4/6/2010 10:02:15 AM
我希望此格式为yyyy-MM-dd HH:MM:ss
我已经尝试了{0:yyyy-MM-dd hh:MM:ss}上面的自定义格式,但它仍然是相同的输出。{0:u}或{0:s}也会发生同样的情况。通过向数据绑定添加转换器解决了这一问题:
<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
}
//
///日期时间格式化程序-用于数据绑定项的短日期
///
公共类日期转换器:IValueConverter
{
#区域公共方法
#区域转换器成员
///
///将数据项转换为短日期
///
///价值观
///目标类型
///参数
///培养
///转换对象
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
变量日期=(日期时间)值;
返回日期(ToString(“dd/MM/yyyy HH:MM:ss”);
}
///
///将数据项转换回短日期
///
///价值观
///目标类型
///参数
///培养
///转换对象
公共对象转换回(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
var s=(字符串)值;
返回(DateTime.Parse);
}
#端域转换器成员
#端域公共方法
}
这就像是一种治疗——可以通过一些空检查来改进!:)