9

Quiero concatenar en el título de mi ventana una propiedad de mi viewmodel y un valor que proviene de un archivo de recursos. Esto es lo que he de trabajar sin la cadena a partir de recursos:Stringformat concatena databinding y el valor del recurso

Title="Binding Path=Description, StringFormat=Building: {0}}" 

Ahora quiero quitar la cadena "construcción" y poner un valor de un recurso como el que uso en otros lugares:

xmlns:res="clr-namespace:Project.View.Resources" 
{res:Strings.TitleDescription} 

¿Cómo puedo definir ambos? ¿Puedo definir como un parámetro {1}?

Respuesta

15

Sí, puedes. Simplemente use un MultiBinding.

El artículo de MSDN en StringFormat tiene un ejemplo.

En su caso, el código sería algo como esto:

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0} {1}"> 
     <Binding Source="{x:Static res:Strings.TitleDescription}"/> 
     <Binding Path="Description"/> 
     </MultiBinding> 
    </TextBlock.Text> 
    </TextBlock> 
+0

¿Multibinding a un recurso estático? nunca he oído hablar de él: S – Louro

+0

Es posible que haya entendido mal, ¿qué quiere decir con "recurso estático"? ¿Es una propiedad estática de una clase? Si ese es el caso, creo que el soporte para atarlos es nuevo en .NET 4.5 – madd0

+0

He actualizado la pregunta. Quiero usar un valor de mi recurso .resx. No creo que pueda hacer eso con un enlace ... – Louro

7

que he visto la respuesta MultiBinding en varios lugares ahora, y casi nunca es necesario utilizarlo. En su lugar, puede definir su recurso como el formato de cadena, y siempre que haya solo un argumento de formato de cadena, no se requiere MultiBinding. Hace que el código mucho más sucinta:

<TextBlock Text="{Binding Description, StringFormat={x:Static res:Strings.TitleDesc}}" /> 

Y el recurso TitleDesc obviamente "Building: {0}".

+0

Votación a favor por esta respuesta. Mucho más simple que usar MultiBindings –

+1

Gracias, estaba cometiendo el error de prefijar la cadena en los recursos con '{}'. También quería algo como '\\ Path \ {0}', así que lo que terminé poniendo en el archivo .resx era '\\\\ Path \\ {0}' - necesario para escapar de las barras diagonales inversas – stambikk