programing

XAML 요소에서 StringFormat을 사용하는 방법은 무엇입니까?

copyandpastes 2021. 1. 18. 22:13
반응형

XAML 요소에서 StringFormat을 사용하는 방법은 무엇입니까?


주문에 바인딩하는 요소의 XAML 스택에 깊이 빠져 있습니다.

주문 날짜는 "12/31/2008 12:00:00 AM"과 같이 표시됩니다.

예를 들어 "31.12.2008"로 표시하고 싶습니다.

어떻게 할 수 있습니까? 내가 본 다른 유래 질문이 있는 StringFormat을 언급하지만 내가 일을 얻을 수없는 방법으로 multibinding 사용합니다.

내가 원하는 구문의 종류는 다음과 같습니다 (이것은 의사 코드입니다). 필요한 곳에 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이 필요합니다 그래서 (그것을 얻을 비주얼 스튜디오 2008 SP1 ) 또는 더 나은 새로운 사용 BindingBase.StringFormat을 재산 :

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

블로그 게시물 Trying out 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&#x3a;mm}</value>
</data>

콘텐츠 페이지에 resx 파일의 위치를 ​​포함합니다.

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

And then you can use it in your binding like so:

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

ReferenceURL : https://stackoverflow.com/questions/685743/how-to-use-stringformat-in-xaml-elements

반응형