Ответ 1
Я не тестировал его, но думаю, что это должно работать:
<GridViewColumn
Header="Order Date"
DisplayMemberBinding=
"{Binding Path=OrderDate, StringFormat='{}{0:dd.MM.yyyy}'}"/>
Я глубоко в стеке XAML элементов, привязывающих к заказам.
Дата заказа отображается, например. "31.12.2008 12:00:00".
Я хочу, чтобы он отображался как, например, "31.12.2008".
Как я могу это сделать? Я видел qaru.site/info/109129/..., упоминающие StringFormat, но они используют многосвязывание способами, которые я не могу заставить работать.
Вот такой синтаксис, который я хотел бы (это псевдокод), просто указав StringFormat, где он вам нужен, возможно ли это как-то?
<StackPanel>
<ListView ItemsSource="{Binding Orders}">
<ListView.View>
<GridView>
<GridViewColumn
Header="Order ID"
DisplayMemberBinding="{Binding Path=OrderID}"
StringFormat="{}{1:dd.MM.yyyy}"/>
<GridViewColumn
Header="Order Date"
DisplayMemberBinding="{Binding Path=OrderDate}"/>
</GridView>
</ListView.View>
</ListView>
</StackPanel>
Я не тестировал его, но думаю, что это должно работать:
<GridViewColumn
Header="Order Date"
DisplayMemberBinding=
"{Binding Path=OrderDate, StringFormat='{}{0:dd.MM.yyyy}'}"/>
В общем, вы можете найти связанное свойство зависимостей *StringFormat
. Например, все ContentControl реализации (такие как Label и Tooltip) имеют Свойство зависимости ContentStringFormat:
<Label
Content="{Binding Path=DateAsked}"
ContentStringFormat="{}{0:yyyy/MM/dd HH:mm:ss}" />
В вашем случае, в то время как GridViewColumn имеет зависимость HeaderStringFormat свойство, чтобы идти вместе с Header
, для DisplayMemberBinding
нет аналога, поэтому вам понадобится .NET 3.5 SP1 (получите его с Visual Studio 2008 SP1) или лучше использовать новый Свойство BindingBase.StringFormat:
<GridViewColumn
Header="Order ID"
DisplayMemberBinding="{Binding Path=OrderID, StringFormat='{}{0:dd.MM.yyyy}'}"
/>
В блоге есть еще много примеров Попытка Binding.StringFormat.
XAML
<UserControl.Resources>
<myNamespace:DateTimeConverter x:Key="DateTimeConverter" />
</UserControl.Resources>
<GridViewColumn
DisplayMemberBinding=="{Binding Path=OrderDate, Converter={StaticResource DateTimeConverter}}"
/>
С#
public class DateTimeConverter : IValueConverter
{
public object Convert(object value,
Type targetType,
object parameter,
CultureInfo culture)
{
if (value != null)
{
return ((DateTime)value).ToString("dd.MM.yyyy");
}
else
{
return String.Empty;
}
}
public object ConvertBack(object value,
Type targetType,
object parameter,
CultureInfo culture)
{
return DateTime.Parse(value.ToString());
}
}
Если вы хотите локализовать формат даты, вы можете включить его в файл .resx. Вам нужно будет настроить приложение для локализации, следуя этому руководству: https://developer.xamarin.com/guides/xamarin-forms/advanced/localization/.
Запись resx:
<data name="DateFormat" xml:space="preserve">
<value>{0:dddd d MMMM H:mm}</value>
</data>
На странице вашего контента затем укажите местоположение файла resx
xmlns:il8n="clr-namespace:MyProject.Localization;assembly=MyProject"
И тогда вы можете использовать его в своем привязке так:
<Label
Text = "{Binding Time, StringFormat={il8n:Translate DateFormat}}"