web-dev-qa-db-ja.com

XAML要素でStringFormatを使用する方法は?

私は、注文にバインドする要素の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>
53
Edward Tanguay

私はそれをテストしていませんが、これはうまくいくと思います:

<GridViewColumn
    Header="Order Date"
    DisplayMemberBinding=
        "{Binding Path=OrderDate, StringFormat='{}{0:dd.MM.yyyy}'}"/>
80
Razzie

一般に、関連する*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を試す )。

28

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());
    }
}
3
sipwiz

日付形式をローカライズする場合は、.resxファイルに含めることができます。次のガイドに従って、ローカライズ用にアプリを設定する必要があります。 https://developer.xamarin.com/guides/xamarin-forms/advanced/localization/

Resxエントリ:

<data name="DateFormat" xml:space="preserve">
    <value>{0:dddd d MMMM H&#x3a;mm}</value>
</data>

コンテンツページに、resxファイルの場所を含めます

xmlns:il8n="clr-namespace:MyProject.Localization;Assembly=MyProject"

そして、次のようにバインディングで使用できます:

<Label
    Text = "{Binding Time, StringFormat={il8n:Translate DateFormat}}"
0
RobVoisey