2012-06-13 18 views
14

Como sabe, StringFormat es de gran importancia para la representación de datos en WPF. Mi problema es cómo usar StringFormat cuando se realiza la multiburación en WPF?Cómo usar el formato de cadena en multibinding en WPF XAML

Si doy un ejemplo muy sencillo:

tenemos las variables, que son A y B y cuyos valores son 10.255555 25.6999999 y

Y queremos mostrarles 10.2,25.6?

¿Cómo puedo hacer esto con la multiburación? Normalmente es pedazo de pastel con ValueConverter

Cualquier ayuda e ideas sobre este tema serán apreciados greately

Respuesta

48

acaba de establecer la propiedad StringFormat en el MultiBinding; utilizar marcadores de posición ({0}, {1} ...) para cada unión en la unión múltiple, e incluyen especificadores de formato si es necesario (por ejemplo, F1 para un número decimal con el dígito 1 decimal)

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0:F1}{1:F1}"> 
      <Binding Path="A" /> 
      <Binding Path="B" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

La parte {} en el comienzo es el formato cadena es una secuencia de escape (de lo contrario, el analizador XAML consideraría { como el comienzo de una extensión de marcación)

+0

Bueno, gracias por su respuesta rápida, pero ¿puede explicar esto brevemente si es posible en su respuesta? – ibrahimyilmaz

+0

@ibrahimyilmaz, lo siento, pensé que el código era auto explicativo ... Agregué una breve explicación. –

6

Para simplificar, podría usar dos etiquetas de texto/etiquetas para mostrar los valores.

Si está utilizando .Net4, puede enlazar en un elemento Ejecutar línea de un TextBlock

<TextBlock> 
    <Run Text="{Binding A, StringFormat={}{0:F1}}"/> 
    <Run Text="{Binding B, StringFormat={}{0:F1}}"/> 
</TextBlock> 
+0

Entre los 2 'Run's habrá un espacio. Eso no es como 'StringFormat =" {} {0: F1} {1: F1} "' mencionado anteriormente. Incluso la escritura '' tendrá éxito hasta que no formatee XAML (como hace ReSharper) y termine en ' [CRLF] [CRLF] ' – Marcel

4

Si alguien está buscando "Formatos de hora" Esto es para las 24 horas del reloj, que es como llegué a este mensaje:

<TextBlock TextAlignment="Center"> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0:HH:mm} - {1:HH:mm}"> 
      <Binding Path="StartTime" /> 
      <Binding Path="EndTime" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

el 0: y 1: son la referencia a la Bindings

[0: hh: mm tt] para mostrar AM/PM