2012-04-24 68 views
1

我想在歌曲的标题中合并歌曲的名称和ID。难道是可能的,如果我有:将两个字段合并为一个文本内容wpf

Song 
{ 
    public string Name {get; set;} 
    public int ID {get; set;} 
} 

我想将它们绑定到一个扩展的头。目前,只能绑定一个属性。它是这样的:

<Expander Foreground="#FFF4E7CA" Header="{Binding Song.Name}" FontWeight="Bold"> 
</Expander> 

但我想有些事情是这样的:

Header = "{Binding Some.Name, Song.ID}" 

是否有可能以某种方式呢?如果是,如何?提前致谢。

回答

5

事情是这样的:

<Expander ...> 
    <Expander.Header> 
    <TextBlock> 
     <TextBlock Text="{Binding Song.Name}"/> 
     <TextBlock Text=" "/> 
     <TextBlock Text="{Binding Sond.ID}"/> 
    </TextBlock> 
    </Expander.Header> 
    ... 
</Expander> 
+0

我试过这个,我得到了:对象只能接受一个孩子。我不能添加多个'运行'标签 – olidev 2012-04-24 11:01:13

+0

你确定它是一个'TextBlock'而不是'TextBox'吗? – 2012-04-24 11:13:20

+0

我忘了添加TextBlock.I只是添加了它,但我得到了另一个错误:不能在Run类型的Text属性上设置绑定。 – olidev 2012-04-24 11:22:41

5

你既可以

1)在您的视图模型公开一个新的属性并绑定到

Song 
{ 
    public string Name {get; set;} 
    public int ID {get; set;} 
    public string Header {get { return string.Format("{0} {1}", Name, ID); } } 
} 

2)使用字符串格式的多重绑定

<TextBlock.Text> 
    <MultiBinding StringFormat="{}{0} {1}"> 
     <Binding Path="Song.Name"/> 
     <Binding Path="Song.Id"/> 
    </MultiBinding> 
</TextBlock.Text> 

3)如果你使用WPF4,然后Run是绑定的使用则Run会工作,所以回答有关。

+0

解决方案1我无法修改控件内部。解决方案2不适用于WPF 3.5。我无法将目标.net框架更改为4.感谢有关解决方案的概述。它对我有很大帮助 – olidev 2012-04-24 11:48:20

+0

解决方案#2在.net 4中无效。源不是可绑定属性。正确的代码是 2012-08-20 13:47:42

+0

@KevinKalitowski:谢谢并修复。 – Phil 2012-08-20 17:01:33