2009-06-18 7 views
5

puedo conseguir MultiBinding trabajar con StringFormat:¿Cuál es la sintaxis correcta para usar StringFormat con enlace único?

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

pero lo que es la sintaxis correcta para una sola unión? El siguiente no funciona (aunque parece ser la misma sintaxis que this example):

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

RESPUESTA:

Gracias Matt, lo que necesitaba era una combinación de sus dos respuestas, esto funciona muy bien :

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

Respuesta

10

usted quiere dejar las llaves de la cadena de formato en su ejemplo, porque no se está utilizando como un marcador de posición (y como utilizaría "{0}" en String.Format ()).

Así:

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

Si desea hacer referencia al valor de marcador de posición en algún lugar dentro de la cadena, puede hacerlo por escapar de las llaves con una barra invertida:

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

¿No cree necesita las barras diagonales inversas en su segundo ejemplo, funciona sin ellas o están allí por algún otro motivo. –

+0

Extraño. He tenido errores de compilación en el pasado cuando omití las barras diagonales inversas. Me alegro de que funcione para ti! –

+0

He encontrado que si la cadena comienza con el corsé como '{0} Some Text', entonces necesita escapar de los corchetes. Si cualquier otro personaje (como un espacio) es lo primero, no necesita escapar de ellos. – Tod

Cuestiones relacionadas