57

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

4 に答える 4

84

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

<GridViewColumn
    Header="Order Date"
    DisplayMemberBinding=
        "{Binding Path=OrderDate, StringFormat='{}{0:dd.MM.yyyy}'}"/>
于 2009-03-26T13:31:07.310 に答える
29

*StringFormat一般に、関連する依存関係プロパティを探すことができます。たとえば、すべてのContentControl実装 (Label や Tooltip など) にはContentStringFormat 依存関係プロパティがあります。

<Label
    Content="{Binding Path=DateAsked}"
    ContentStringFormat="{}{0:yyyy/MM/dd HH:mm:ss}" />

あなたの場合、GridViewColumnにはHeaderStringFormat 依存関係プロパティがありますがHeader、に類似したものはないため、新しいBindingBase.StringFormatDisplayMemberBindingを使用するには、 .NET 3.5 SP1 ( Visual Studio 2008 SP1で取得) またはそれ以上のものが必要になります。プロパティ:

<GridViewColumn 
    Header="Order ID"
    DisplayMemberBinding="{Binding Path=OrderID, StringFormat='{}{0:dd.MM.yyyy}'}"
/>

ブログ投稿Trying out Binding.StringFormatには、さらに多くの例があります。

于 2010-09-25T15:09:10.650 に答える
4

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());
    }
}
于 2009-03-26T13:24:59.197 に答える