私は、注文にバインドする要素のXAMLスタックに深く関わっています。
注文日は、たとえば「12/31/2008 12:00:00 AM」。
例として表示したい"31.12.2008"。
これどうやってするの? 他のstackoverflowの質問 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
に類似するものはありません。したがって、新しい BindingBase.StringFormatプロパティ を使用するには、.NET 3.5 SP1( Visual Studio 2008 SP1 で取得)以上が必要です。
<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}}"
/>
C#
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}}"