web-dev-qa-db-fra.com

StringFormat et Multibinding avec Label

Je voudrais utiliser StringFormat pour faire quelque chose comme ceci:

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

Cependant, cela ne fonctionne pas et j'ai plutôt cette erreur:

MultiBinding a échoué car il n'a pas de convertisseur valide. MultiBindingExpression: l'élément cible est 'Label' (Name = 'myLabel'); la propriété cible est 'Content' (type 'Object')

Existe-t-il un moyen de faire fonctionner ce code?

46
Filimindji

Vous ne pouvez pas lier cela parce que vous essayez de lier une chaîne à un objet qui ne fonctionnera pas car StringFormat requiert que sa cible soit un type de chaîne. Vous pouvez contourner cela en utilisant un TextBlock à la place (qui a une propriété Text) ou en plaçant le Textblock en tant qu'enfant du Label:

<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>
102
Leom Burke

Pour ceux qui se demandent, vous pouvez également laisser le <Label.Content> tag de la réponse de Leom Burke. Cela enregistre deux autres lignes de code.

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

Resources.MyText peut contenir n'importe quoi comme "Fox saute par-dessus {0}".

1
RoadVampire