2010-12-09 15 views
40

me gustaría utilizar StringFormat obligado a hacer algo como esto:StringFormat y MultiBinding con la etiqueta

<Label x:Name="myLabel"> 
    <Label.Content> 
     <Multibinding StringFormat="{}{0} - {1}"> 
      <Binding Path="Lib1" /> 
      <Binding Path="Lib2" /> 
     </MultiBinding> 
    </Label.Content> 
</Label> 

Sin embargo, es que no funciona y tengo este error en su lugar:

MultiBinding fracasó porque no tiene un convertidor válido MultiBindingExpression: el elemento objetivo es 'Label' (Name = 'myLabel'); propiedad de destino es 'Contenido' (escriba 'Objeto')

¿Hay alguna manera de hacer que este código funcione?

Respuesta

94

No se puede vincular esto porque está intentando vincular una cadena a un objeto que no funcionará porque StringFormat requiere que su destino sea un tipo de cadena. Usted puede evitar esto, ya sea usando un TextBlock lugar (que tiene una propiedad de texto) o poner el Textblock como el niño de la etiqueta:

<Label x:Name="myLabel"> 
    <Label.Content> 
     <TextBlock> 
      <TextBlock.Text> 
       <MultiBinding StringFormat="{}{0} - {1}"> 
        <Binding Path="Lib1" /> 
        <Binding Path="Lib2" /> 
       </MultiBinding> 
      </TextBlock.Text> 
     </TextBlock> 
    </Label.Content> 
</Label> 
+1

Eso es exactamente lo que iba a decir, y esta publicación lo confirma también: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/c60b90e6-8426-4c2b-a547-eaa92920862f – Tom

+1

Gracias, usaré un TextBlock en lugar de una etiqueta. la primera solución también funciona, pero creo que la segunda es más elegante. – Filimindji

+4

+1 La última solución también hereda el estilo de la etiqueta, que es una pequeña ventaja si no puede molestarse en aplicar el estilo 'TextBlock'. –

3

Para aquellos que se preguntan también puede dejar la etiqueta de <Label.Content> de la respuesta de Leom Burke . Esto ahorra otras dos líneas de código.

<Label x:Name="myLabel"> 
    <TextBlock> 
     <TextBlock.Text> 
      <MultiBinding StringFormat="{}{0} - {1}"> 
       <Binding Path="Lib1" /> 
       <Binding Path="Lib2" /> 
      </MultiBinding> 
     </TextBlock.Text> 
    </TextBlock> 
</Label> 
0
<Label> 
    <AccessText> 
     <MultiBinding StringFormat="{x:Static properties:Resources.MyText}"> 
     <Binding Path="MyObj.MyProp" Mode="OneTime"/> 
     </MultiBinding> 
    </AccessText> 
</Label> 

Dónde Resources.MyText puede contener algo como "Fox salta por encima de {0}."

Cuestiones relacionadas