2009-03-26 8 views
49

나는 주문에 바인딩하는 요소의 XAML 스택에 깊이 빠져있다.XAML 요소에서 StringFormat을 사용하는 방법?

주문 날짜는 예 : "12/31/2008 12:00:00 AM".

예 : "31.12.2008".

어떻게하면됩니까? 내가 other stackoverflow questions 언급 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> 

답변

72

나는 그것을 테스트하지 않은,하지만 난이 일을해야한다고 생각 : 일반적으로

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

예 빙고 덕분에 –

+3

그리고 양쪽에 텍스트를 추가 할 수 있습니다 예 : "Start Date : {0 : dd-MM-yyyy}" –

+0

작은 따옴표를 StringFormat 값에서 제거해야했습니다. – Grault

3

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()); 
    } 
} 
+2

StringFormat 메서드를 사용하는 것이 훨씬 간단합니다. –

+0

다른 답변을 실행하는 동안'ConverterCulture = {x : Static sysglb : CultureInfo.CurrentUICulture}} ''를 어떻게 검색하는지 알기 때문에 귀하의 솔루션으로 끝났습니다 – Nasenbaer

28

을, 당신은 볼 수 연관된 *StringFormat 종속성 소품 erty. 예를 들어, (예 : 레이블 및 도구 설명 등) 모든 ContentControl 구현이있는 ContentStringFormat dependency property 다음 GridViewColumn가 함께 Header로 갈 수있는 HeaderStringFormat dependency property을 가지고 동안 DisplayMemberBinding 그래서 당신을위한 아날로그가없는

귀하의 경우에는
<Label 
    Content="{Binding Path=DateAsked}" 
    ContentStringFormat="{}{0:yyyy/MM/dd HH:mm:ss}" /> 

, .NET 3.5 SP1이 필요합니다 새로운 BindingBase.StringFormat Property 사용하거나 더 나은 (Visual Studio 2008 SP1으로 그것을 얻을) :

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

은 블로그 게시물 Trying out Binding.StringFormat에서 많은 더 많은 예제가 있습니다.

+1

나는 이것을 좋아합니다.ContentStringFormat에 대해 알지 못했습니다. 나에게 약간의 아이디어를 준다. – TravisWhidden

+0

Ditto as TravisWhidden – Paul

0

날짜 형식을 현지화하려면 .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}}"