<TextBlock Text="{Binding Date}"/>
我想要的日期格式为 “DD/MM/YYYY”,换句话说,没有时间。
我试过了:<TextBlock Text="{Binding Date, StringFormat={}{0:dd/MM/yyyy}}"/>
,但它不起作用。
给我一个错误:在'绑定'类型中找不到属性'StringFormat'。
<TextBlock Text="{Binding Date}"/>
我想要的日期格式为 “DD/MM/YYYY”,换句话说,没有时间。
我试过了:<TextBlock Text="{Binding Date, StringFormat={}{0:dd/MM/yyyy}}"/>
,但它不起作用。
给我一个错误:在'绑定'类型中找不到属性'StringFormat'。
最好的也是最简单的方法是使用一个转换器,将Date传递给它并获取格式化的字符串。在例如MyNamespace.Converters
命名空间:
public class DateFormatConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value == null)
return null;
DateTime dt = DateTime.Parse(value.ToString());
return dt.ToString("dd/MM/yyyy");
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
并在您的XAML只是参考的转换器,并添加以下转换器:
xmlns:conv="using:MyNamespace.Converters"
在您的XAML页面,并在page.resources添加此
<conv:DateFormatConverter x:Name="DateToStringFormatConverter"/>
<TextBlock Text="{Binding Date, Converter={StaticResource DateToStringFormatConverter}"/>
有在Binding类中没有名为StringFormat
的属性。您可以使用Converter和ConverterParameter来执行此操作。你可以参考Formatting or converting data values for display。
例如,在这里,我将DatePicker
的日期绑定到TextBlock
的文本。
XAML:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.Resources>
<local:DateFormatter x:Key="DateConverter"/>
</Grid.Resources>
<DatePicker Name="ConverterParmeterCalendarViewDayItem"></DatePicker>
<TextBlock Height="100" VerticalAlignment="Top" Text="{Binding ElementName=ConverterParmeterCalendarViewDayItem, Path=Date, Converter={StaticResource DateConverter},ConverterParameter=\{0:dd/MM/yyyy\}}" />
</Grid>
代码背后,DateFormatter类:
来给出完全相同的答案。最好的办法是使用转换器,如上所示,除非您将日期更改为代码隐藏字符串,并将其格式化。 [日期时间格式信息](https://msdn.microsoft.com/en-us/library/az4se3k1(v = vs.110).aspx) –
不幸的是,它不在这里工作..类型'本地:DateFormatter'未找到。我错过了什么? – developer033
您需要创建一个名为DateFormatter的类,请参阅我的DateFormatter类。 –
这里有一个很好的例子:
如果你的转换器类是在不同的命名空间(建议在单独的文件夹中) R),您可以添加
xmlns:conv="using:MyNamespace.Converters"
,并使用它像这样:
<UserControl.Resources>
<conv:DateToStringConverter x:Key="Converter1"/>
</UserControl.Resources>
其余应保持一样从链接的例子。
为什么要复杂化?你可以使用编译的数据绑定
{x:Bind ViewModel.PropertyWithDateTime.ToString("....")}
我知道这是迟到了,但我有同样的问题,并提出了这个解决方案。也许不是最短但纯粹的XAML。
<TextBlock>
<Run Text="{x:Bind Foo.StartDate.Day}"/>.<Run Text="{x:Bind Foo.StartDate.Month}"/>.<Run Text="{x:Bind Foo.StartDate.Year}"/>
</TextBlock>
关于StringFormat
的好处是,它允许您指定输出的格式。这里是我使用的转换器,可以让你指定格式。
public sealed class DateTimeToStringConverter : IValueConverter
{
public static readonly DependencyProperty FormatProperty =
DependencyProperty.Register(nameof(Format), typeof(bool), typeof(DateTimeToStringConverter), new PropertyMetadata("G"));
public string Format { get; set; }
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value is DateTime dateTime && value != null)
{
return dateTime.ToString(Format);
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return DateTime.ParseExact(value.ToString(), Format, CultureInfo.CurrentCulture);
}
}
如何使用(兼容多种格式为例):
<Page.Resources>
<ResourceDictionary>
<converters:DateTimeToStringConverter
x:Name="dateStringConverter"
Format="dd-MM-yyyy" />
<converters:DateTimeToStringConverter
x:Name="timeStringConverter"
Format="HH:mm" />
</ResourceDictionary>
</Page.Resources>
<!-- Display the date -->
<TextBlock Text="{Binding Path=Date, Converter={StaticResource dateStringConverter}}" />
<!-- Display the time -->
<TextBlock Text="{Binding Path=Date, Converter={StaticResource timeStringConverter}}" />
试试这个,
<Label x:Name="LblEstEndTime" Text="{Binding EndTime, StringFormat='Est. End Time: {0:MM/dd/yy h:mm tt}'}" Style="{StaticResource ListCellSubTitleStyle}" VerticalOptions="EndAndExpand" />
虽然代码只有答案可能会解决原始问题,但一些解释将有助于理解您使用的方法以及它的工作原理。 –
它不工作。错误:资源“DateStringToFormatConverter”无法解析。 – developer033
您必须在xaml中声明转换器才能使用它 – CodeNoob
如果您可以编辑完整答案的答案,那就太好了。 – developer033