2009-06-18 6 views
5

Je peux me MultiBinding de travailler avec StringFormat:Quelle est la syntaxe correcte pour utiliser StringFormat avec une liaison unique?

<TextBlock.Text> 
    <MultiBinding StringFormat="{}{0} {1} (hired on {2:MMM dd, yyyy})"> 
     <Binding Path="FirstName"/> 
     <Binding Path="LastName"/> 
     <Binding Path="HireDate"/> 
    </MultiBinding> 
</TextBlock.Text> 

Mais quelle est la syntaxe correcte pour seule liaison? Ce qui suit ne fonctionne pas (bien qu'il semble être la même syntaxe que this example):

<TextBlock Text="{Binding Path=HiredDate, StringFormat='{MMM dd, yyyy}'}"/> 

RÉPONSE:

Merci Matt, ce que je avais besoin était une combinaison de vos deux réponses, cela fonctionne très bien :

<TextBlock Text="{Binding Path=HiredDate, 
    StringFormat='Hired on {0:MMM dd, yyyy}'}"/> 

Répondre

10

vous voulez laisser les accolades de la chaîne de format dans votre exemple, parce que vous ne les utilisez pas comme un espace réservé (comme vous utiliseriez « {0} » dans String.Format ()).

Alors:

<TextBlock Text="{Binding Path=HiredDate, StringFormat='MMM dd, yyyy'}"/> 

Si vous souhaitez référencer la valeur de l'espace réservé quelque part dans la chaîne, vous pouvez le faire en échapper aux accolades avec une barre oblique inverse:

<TextBlock Text="{Binding Path=HiredDate, StringFormat='Hired on \{0\}'}"/> 
+1

Vous ne pensez pas vous avez besoin des barres obliques inverses sur votre deuxième exemple, cela fonctionne sans elles, ou sont-elles là pour une autre raison. –

+0

Étrange. J'ai déjà eu des erreurs de compilation lorsque j'ai omis les barres obliques inverses. Content que cela fonctionne pour vous! –

+0

J'ai trouvé que si la chaîne commence par l'accolade comme '{0} Some Text', alors vous devez échapper les accolades. Si un autre personnage (comme un espace) vient en premier, vous n'avez pas besoin de leur échapper. – Tod

Questions connexes