2010-12-09 53 views
40

我想用的StringFormat来做些事情是这样的:的StringFormat和Multibinding与标签

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

但是,它不工作,我得到这个错误,而不是:

MultiBinding失败的原因它没有有效的转换器。 MultiBindingExpression:目标元素是'Label'(Name ='myLabel');目标属性是'内容'(类型'对象')

有什么办法可以使这段代码有效吗?

回答

94

你不能绑定这个,因为你试图将一个字符串绑定到一个不能工作的对象,因为StringFormat要求它的目标是一个字符串类型。

<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

这正是我要说的,这篇文章也证实了这一点:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/c60b90e6-8426-4c2b-a547-eaa92920862f – Tom 2010-12-09 14:30:19

3

对于那些想知道,你也可以把从Leom伯克的答案<Label.Content>标签:您可以使用一个TextBlock代替(其中有一个Text属性),或者把文本块作为标签的孩子通过两种解决这个。这节省了另外两行代码。像 “狐狸跳过{0}”。

<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> 

哪里Resources.MyText可以容纳任何东西