我有一个DataGrid,它有一个Start Time列。这绑定到一个字符串字段,该字段以hh:mm:ss格式保存时间。但是,我只想以格式hh:mm显示网格中的时间。有没有办法使用Binding中的字符串格式属性来实现这一点。
答案 0 :(得分:3)
<DataGridTextColumn Binding="{Binding MyDate, StringFormat='HH:mm'}" />
答案 1 :(得分:1)
我已经用尽了我的搜索,试图找出WPF中Binding的StringFormat属性是否有办法将字符串转换为日期,然后将其格式化为HH:mm。
所以我已经开始创建一个转换器来执行与上面建议相同的操作。我以为我会把它贴在这里供有需要的人使用。
public class StringToDateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
{
return string.Empty;
}
DateTime d;
try
{
d = System.Convert.ToDateTime(value);
return d;
// The WPF code that uses this converter will then use the stringformat
// attribute in binding to display just HH:mm part of the date as required.
}
catch (Exception)
{
// If we're unable to convert the value, then best send the value as is to the UI.
return value;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
//Insert your implementation here...
return value;
}
}
以下是您在WPF中实现结果的方法。
<DataGridTextColumn Header="Start Time" Width="Auto" Binding="{Binding VisitOpStartTime, Converter={StaticResource s2dConverter}, StringFormat=\{0:HH:mm\}}"></DataGridTextColumn>
最后,不要忘记添加以下内容,根据您的需求定制。
xmlns:converter="clr-namespace:[YourAppNamespace].Converters"
<Window.Resources>
<converter:StringToDateConverter x:Key="s2dConverter" />
</Window.Resources>
希望这有帮助。